{"version":3,"file":"static/js/bf1a5b37ca0beab447fc.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/components/product.component.tsx?81ba"],"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 React, { useState } from 'react';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n //AddToCartComponent,\r\n //AddToOrderTemplateComponent,\r\n IPriceComponentResources,\r\n ISwatchItem,\r\n //PriceComponent,\r\n ProductComponentSwatchComponent,\r\n RatingComponent,\r\n IOrderTemplateNameDialogResources,\r\n IAddToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources\r\n} from '@msdyn365-commerce/components';\r\nimport { PriceComponent } from './price.component';\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 {\r\n AttributeSwatch,\r\n AttributeValue,\r\n Customer,\r\n ProductDimension,\r\n ProductList,\r\n ProductPrice,\r\n ProductSearchResult,\r\n SimpleProduct,\r\n UnitOfMeasureConversion\r\n} 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 OrderTemplate\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n Tooltip,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent, Node,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { AllergensModal } from '../../../../components/product-list-component/components/allergens-modal';\r\nimport { ProductInformationModal } from '../../../../components/product-list-component/components/product-information-modal';\r\nimport ProductListOrderQuantity from '../../../../components/common/product-list-order-quantity';\r\nimport { getLocale } from '../../../../components/product-list-component/locale';\r\nimport { AddToCartComponent, IAddToCartToastResources } from '../../../../modules/dlvry-buybox/common/add-to-cart.component';\r\nimport { toast } from '../../../../components/toast/toast';\r\nimport AddToOrderTemplateComponent from './addtoordertemplate.component';\r\nimport PQueue from 'p-queue';\r\nimport { IProductInventoryInformation } from '../../../../components/common/product-inventory-utils';\r\nimport { ProductSearchResultExt } from '../../../../modules/dlvry-search-result-container/components';\r\nimport { UnitOfMeasure } from '../../../../components/unit-of-measure';\r\nimport DiscountBadge from '../../../../components/discount-badge/discount-badge';\r\nimport { getTemperatureZoneIcon } from '../../../../shared-utils/attributes/get-temperature-zone';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{\r\n cart?: ICartState,\r\n product?: ProductSearchResultExt,\r\n simpleProduct?: SimpleProduct,\r\n orderTemplates?: OrderTemplate[],\r\n customerInformation?: Customer,\r\n unitConversions?: UnitOfMeasureConversion[]\r\n}> {\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 cartQueue?: PQueue;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n wishlistButton?: React.ReactNode;\r\n isEnabledProductDescription?: boolean;\r\n isPriceMinMaxEnabled?: boolean;\r\n disableBuyButton?: boolean;\r\n showPrice?: boolean;\r\n showAgreementProduct?: boolean;\r\n userHasAccess?: boolean;\r\n buyAlwaysAdd?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n inventoryLabel?: string;\r\n inventoryStatus?: IProductInventoryInformation;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n addToCartText?: string;\r\n updateCartText?: string,\r\n removeFromCartText?: string;\r\n outOfStockText?: string;\r\n priceErrorText?: string;\r\n toastStrings?: IAddToCartToastResources;\r\n inCartTooltipText?: string;\r\n transitTooltip?: string;\r\n agreementProductTooltip?: string\r\n addToOrderTemplateResources?: IAddToOrderTemplateResources;\r\n onUpdateOrderTemplates?: (orderTemplate?: ProductList) => Promise;\r\n retrieveOrderTemplates?(): Promise;\r\n onBuyValidate?: (product: ProductSearchResultExt, quantity: number) => Promise;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {\r\n}\r\n\r\nexport interface IAddToOrderTemplateResources {\r\n addToOrderTemplateHeader: string;\r\n noOrderTemplatesMessage: string;\r\n noOrderTemplatesDescription: string;\r\n createAnOrderTemplateButtonText: string;\r\n createNewOrderTemplateButtonText: string;\r\n cancelOrderTemplateCreationButtonText: string;\r\n selectTemplatesText: string;\r\n addToTemplateButtonText: string;\r\n lineItemsText: string;\r\n createOrderTemplateHeader: string;\r\n orderTemplateTitle: string;\r\n orderTemplateNameAriaLabel: string;\r\n createOrderTemplateDescription: string;\r\n defaultOrderTemplateName: string;\r\n createOrderTemplateButtonText: string;\r\n cancelNewOrderTemplateCreationButtonText: string;\r\n viewOrderTemplateButtonText: string;\r\n continueShoppingButtonText: string;\r\n itemAddedToOrderTemplateHeaderItemOneText: string;\r\n itemAddedToOrderTemplateHeaderItemFormatText: string;\r\n itemAddedToOrderTemplateHeaderMessageText: string;\r\n priceFree: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n duplicatedProductsHeader: string;\r\n duplicatedProductsDescription: string;\r\n updateQuantityButtonText: string;\r\n cancelDuplicateItemsButtonText: string;\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n}\r\n\r\nexport interface BuyValidationResult {\r\n isValid: boolean;\r\n message?: string;\r\n}\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 getDefaultSwatchSelected(coreContext: ICoreContext, productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n const attributeSwatches = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\r\n )?.Swatches;\r\n\r\n if (!ArrayExtensions.hasElements(attributeSwatches)) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\r\n return defaultSwatch;\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 getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\r\n const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\r\n if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n\r\n return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\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\nfunction 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\n// @ts-expect-error\r\nfunction renderProductUnitOfMeasure(context: ICoreContext, unitOfMeasure?: string): JSX.Element | null {\r\n if (!unitOfMeasure) {\r\n return null;\r\n }\r\n return (\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, inventoryStatus?: IProductInventoryInformation): JSX.Element | null {\r\n let availabilityClassName = 'retrieving';\r\n\r\n if (inventoryStatus?.IsProductAvailable || inventoryStatus?.StockLevelLabel?.startsWith('!')) {\r\n availabilityClassName = 'available';\r\n } else if (inventoryStatus?.IsProductAvailable === false) {\r\n availabilityClassName = 'not-available';\r\n }\r\n\r\n if (inventoryStatus?.StockLevelCode === 'ERR') {\r\n availabilityClassName = 'error';\r\n }\r\n\r\n const stockLevelLabel = inventoryStatus?.StockLevelLabel?.startsWith('!')\r\n ? inventoryStatus?.StockLevelLabel?.substring(1)\r\n : inventoryStatus?.StockLevelLabel;\r\n const inventoryStatusText = inventoryStatus?.StockLevelCode === 'ERR'\r\n ? stockLevelLabel || 'ERROR'\r\n : inventoryStatus\r\n ? inventoryAvailabilityLabel?.substring(inventoryAvailabilityLabel.startsWith('!') ? 1 : 0)\r\n : <> ;\r\n\r\n return (\r\n
\r\n \r\n {inventoryStatusText}\r\n \r\n
\r\n );\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\nfunction getProductPageUrlFromDefaultSwatch(\r\n coreContext: ICoreContext,\r\n productUrl: string,\r\n productData?: ProductSearchResult\r\n): string | undefined {\r\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\r\n if (!defaultSwatch?.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\r\n const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n}\r\n\r\nfunction generateAddToOrderTemplateDialogResources(resources: IAddToOrderTemplateResources | undefined): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources?.addToOrderTemplateHeader || 'addToOrderTemplateHeader',\r\n\r\n noOrderTemplatesMessage: resources?.noOrderTemplatesMessage || 'noOrderTemplatesMessage',\r\n noOrderTemplatesDescription: resources?.noOrderTemplatesDescription || 'noOrderTemplatesDescription',\r\n\r\n createAnOrderTemplateButtonText: resources?.createAnOrderTemplateButtonText || 'createAnOrderTemplateButtonText',\r\n createNewOrderTemplateButtonText: resources?.createNewOrderTemplateButtonText || 'createNewOrderTemplateButtonText',\r\n cancelOrderTemplateCreationButtonText: resources?.cancelOrderTemplateCreationButtonText || 'cancelOrderTemplateCreationButtonText',\r\n\r\n selectTemplatesText: resources?.selectTemplatesText || 'selectTemplatesText',\r\n addToTemplateButtonText: resources?.addToTemplateButtonText || 'addToTemplateButtonText',\r\n lineItemsText: resources?.lineItemsText || 'lineItemsText',\r\n };\r\n}\r\n\r\nfunction generateOrderTemplateNameDialogResources(resources: IAddToOrderTemplateResources | undefined): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources?.createOrderTemplateHeader || 'createOrderTemplateHeader',\r\n orderTemplateTitleLabel: resources?.orderTemplateTitle || 'orderTemplateTitle',\r\n orderTemplateNameAriaLabel: resources?.orderTemplateNameAriaLabel || 'orderTemplateNameAriaLabel',\r\n orderTemplateDescription: resources?.createOrderTemplateDescription || 'createOrderTemplateDescription',\r\n\r\n defaultOrderTemplateName: resources?.defaultOrderTemplateName || 'defaultOrderTemplateName',\r\n\r\n orderTemplateButtonLabel: resources?.createOrderTemplateButtonText || 'createOrderTemplateButtonText',\r\n orderTemplateCancelButtonLabel: resources?.cancelNewOrderTemplateCreationButtonText || 'cancelNewOrderTemplateCreationButtonText',\r\n };\r\n}\r\n\r\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IAddToOrderTemplateResources | undefined): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources?.viewOrderTemplateButtonText || 'viewOrderTemplateButtonText',\r\n continueShoppingButtonText: resources?.continueShoppingButtonText || 'continueShoppingButtonText',\r\n itemAddedToOrderTemplateHeaderItemOneText: resources?.itemAddedToOrderTemplateHeaderItemOneText || 'itemAddedToOrderTemplateHeaderItemOneText',\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources?.itemAddedToOrderTemplateHeaderItemFormatText || 'itemAddedToOrderTemplateHeaderItemFormatText',\r\n itemAddedToOrderTemplateHeaderMessageText: resources?.itemAddedToOrderTemplateHeaderMessageText || 'itemAddedToOrderTemplateHeaderMessageText',\r\n freePriceText: resources?.priceFree || 'priceFree',\r\n originalPriceText: resources?.originalPriceText || 'originalPriceText',\r\n currentPriceText: resources?.currentPriceText || 'currentPriceText',\r\n };\r\n}\r\n\r\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources: IAddToOrderTemplateResources | undefined): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources?.duplicatedProductsHeader || 'duplicatedProductsHeader',\r\n duplicatedProductsDescription: resources?.duplicatedProductsDescription || 'duplicatedProductsDescription',\r\n updateQuantityButtonText: resources?.updateQuantityButtonText || 'updateQuantityButtonText',\r\n cancelDuplicateItemsButtonText: resources?.cancelDuplicateItemsButtonText || 'cancelDuplicateItemsButtonText',\r\n };\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 cartQueue,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n productComparisonButton,\r\n wishlistButton,\r\n isEnabledProductDescription,\r\n isPriceMinMaxEnabled,\r\n disableBuyButton,\r\n showPrice = true,\r\n showAgreementProduct,\r\n buyAlwaysAdd,\r\n priceResources,\r\n inventoryLabel,\r\n inventoryStatus,\r\n dimensionAvailabilities,\r\n swatchItemAriaLabel,\r\n addToCartText,\r\n updateCartText,\r\n removeFromCartText,\r\n outOfStockText,\r\n priceErrorText,\r\n toastStrings,\r\n inCartTooltipText,\r\n transitTooltip,\r\n agreementProductTooltip,\r\n addToOrderTemplateResources,\r\n onUpdateOrderTemplates,\r\n retrieveOrderTemplates,\r\n onBuyValidate\r\n}) => {\r\n const locale = getLocale(context);\r\n const { product, simpleProduct } = data;\r\n const [modal, setModal] = useState({\r\n allergensModal: false,\r\n productInformationModal: false\r\n });\r\n const cartQuantity = buyAlwaysAdd\r\n ? 0\r\n : data.cart?.cart?.CartLines?.find(x => x.ProductId === product?.RecordId)?.Quantity ?? 0;\r\n const [orderQuantity, setOrderQuantity] = useState(cartQuantity);\r\n const [breakoff, setBreakoff] = useState(false);\r\n\r\n let productUrl = getProductPageUrlSync(product?.Name ?? '', 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 = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\r\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n const [cardActionsOpen, setCardActionsOpen] = useState(false);\r\n const [showCartCountTooltip, setShowCartCountTooltip] = useState(false);\r\n const cardActionWrapperRef = React.createRef();\r\n const temperatureZoneIcon = React.useMemo(() => product?.TemperatureZone ? getTemperatureZoneIcon(context, product.TemperatureZone) : undefined, [product]);\r\n\r\n // @ts-expect-error -- Variable is declared but its value is never read.\r\n const [forceUpdate, setForceUpdate] = useState(0);\r\n\r\n React.useEffect(() => {\r\n if (buyAlwaysAdd) {\r\n return;\r\n }\r\n\r\n const disposer = reaction(\r\n () => data.cart?.cart.CartLines,\r\n () => {\r\n if (cartQuantity > 0 && !data.cart?.cart.CartLines?.find(x => x.ProductId === product?.RecordId)) {\r\n // This product was removed from cart, reset quantity\r\n setOrderQuantity(0);\r\n }\r\n });\r\n\r\n return disposer;\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n setProductPageUrl(productPageUrlFromSwatch);\r\n setProductImageUrl(productImageUrlFromSwatch);\r\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\r\n\r\n React.useEffect(() => {\r\n // Set 'title' attribute on AddToOrderTemplate buttons\r\n document.querySelectorAll('.order-template-button').forEach(element => {\r\n element.setAttribute('title', element.getAttribute('aria-label') || '');\r\n });\r\n }, []);\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 const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\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 === dimensionToPreSelectInProductCard) {\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 dimensionType === dimensionToPreSelectInProductCard &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault)\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 function renderOrderTemplateButton() {\r\n if (!data.customerInformation?.IsB2b) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {\r\n await onUpdateOrderTemplates?.(orderTemplate);\r\n toast({\r\n text: `${data.product?.Name}${addToOrderTemplateResources?.itemAddedToOrderTemplateHeaderMessageText}`,\r\n autoClose: 3000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n type: 'success',\r\n showProgress: true\r\n });\r\n }}\r\n retrieveOrderTemplates={retrieveOrderTemplates}\r\n />\r\n
\r\n );\r\n }\r\n\r\n function renderWishlistButton(wishlistButton: React.ReactNode): React.ReactNode | undefined {\r\n return wishlistButton;\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 // @ts-expect-error\r\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n const _renderCartButton = (): JSX.Element => {\r\n const product1: SimpleProduct = {\r\n RecordId: data.product?.RecordId!,\r\n ItemId: data.product?.ItemId,\r\n Name: data.product?.Name,\r\n Description: data.product?.Description,\r\n ProductTypeValue: data.product?.RecordId!,\r\n DefaultUnitOfMeasure: data.product?.DefaultUnitOfMeasure,\r\n BasePrice: data.product?.BasePrice!,\r\n Price: data.product?.Price!,\r\n AdjustedPrice: data.product?.Price!,\r\n MasterProductId: data.product?.MasterProductId,\r\n PrimaryImageUrl: data.product?.PrimaryImageUrl,\r\n ExtensionProperties: data.product?.ExtensionProperties\r\n };\r\n const productDimensionAvailabilities =\r\n dimensionAvailabilities &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability =>\r\n ArrayExtensions.hasElements(dimensionAvailabilities) &&\r\n dimensionAvailability.masterProductId &&\r\n dimensionAvailability.masterProductId === product.MasterProductId\r\n );\r\n const ProductAvailableQuantity: any = {\r\n AvailableQuantity: 1000\r\n };\r\n\r\n let cartCount: JSX.Element | undefined = undefined;\r\n // const cartQuantity = data.cart?.cart.CartLines?.find(x => x.ProductId === product.RecordId)?.Quantity;\r\n const cartQuantity = data.cart?.cart.CartLines?.filter(x => x.ProductId === product.RecordId).reduce((acc, val) => acc + (val.Quantity || 0), 0);\r\n\r\n if (cartQuantity) {\r\n const cartCountId = `product-component-cart-count-${product.RecordId}`;\r\n const tooltipString = inCartTooltipText || '{0} i handlekurven';\r\n const tooltipText = format(tooltipString, cartQuantity);\r\n\r\n cartCount = (\r\n setShowCartCountTooltip(true)}\r\n onMouseOut={() => setShowCartCountTooltip(false)}\r\n onTouchStart={() => setShowCartCountTooltip(true)}\r\n >\r\n {cartQuantity}\r\n \r\n {tooltipText}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {\r\n setOrderQuantity(quantity);\r\n }}\r\n onBuyValidate={onBuyValidate}\r\n onAdd={e => {\r\n setForceUpdate((prev) => prev + 1);\r\n }}\r\n />\r\n {cartCount}\r\n \r\n );\r\n };\r\n\r\n const baseClassName = 'msc-product-component';\r\n const shouldUseAlternativeProducer = (product.AgentImporter?.length || 0) > 3 || (product.Producer?.length || 0) > 3;\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.Name}
\r\n {context.request.user.isAuthenticated && renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n showPrice,\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 product.PriceFailed,\r\n priceErrorText,\r\n product.ProductPrice\r\n )}\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.ItemId}
\r\n
\r\n
\r\n {product.Transit && (\r\n
T
\r\n )}\r\n {showAgreementProduct && product.IsAgreementProduct && (\r\n
A
\r\n )}\r\n {temperatureZoneIcon && (\r\n \r\n )}\r\n {product.Name}\r\n
\r\n {product.Brand &&
{product.Brand}
}\r\n {shouldUseAlternativeProducer === false ? (\r\n <>\r\n {product.Manufacturer &&
{product.Manufacturer}
}\r\n \r\n ) : (\r\n <>\r\n {product.Producer && product.Producer.length > 3 && (\r\n
{product.Producer}
\r\n )}\r\n {product.AgentImporter && product.AgentImporter.length > 3 && (\r\n
{product.AgentImporter}
\r\n )}\r\n \r\n )}\r\n
\r\n {context.request.user.isAuthenticated && renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n showPrice,\r\n product.BasePrice,\r\n product.Price,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n undefined,\r\n undefined,\r\n product.PriceFailed,\r\n priceErrorText,\r\n product.ProductPrice\r\n )}\r\n {context.request.user.isAuthenticated && renderProductAvailability(inventoryLabel, inventoryStatus)}\r\n
\r\n \r\n )}\r\n {renderProductDimensions(product.AttributeValues)}\r\n {context.request.user.isAuthenticated && (\r\n
\r\n
\r\n setOrderQuantity(newValue)}\r\n inputQuantityAriaLabel=''\r\n incrementButtonAriaLabel=''\r\n decrementButtonAriaLabel=''\r\n disabled={disableBuyButton}\r\n onBreakoffChange={(newValue) => setBreakoff(newValue)}\r\n />\r\n
\r\n
\r\n )}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\r\n {context.request.user.isAuthenticated && _renderCartButton()}\r\n {\r\n if (e.target === cardActionWrapperRef.current) {\r\n setCardActionsOpen(!cardActionsOpen);\r\n }\r\n }}\r\n onBlur={(e) => {\r\n if (!cardActionWrapperRef.current?.contains(e.relatedTarget as Node)) {\r\n setCardActionsOpen(false);\r\n }\r\n }}\r\n ref={cardActionWrapperRef}\r\n >\r\n
\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\r\n {context.request.user.isAuthenticated && (\r\n <>\r\n
\r\n {modal.allergensModal && (\r\n setModal({ ...modal, allergensModal: false })}\r\n context={context}\r\n product={product}/>\r\n )}\r\n {\r\n setModal({ ...modal, allergensModal: true });\r\n }\r\n }>\r\n \r\n \r\n
\r\n {renderOrderTemplateButton()}\r\n
\r\n {modal.productInformationModal && (\r\n setModal({ ...modal, productInformationModal: false })}\r\n context={context}\r\n product={product}/>\r\n )}\r\n {\r\n setModal({ ...modal, productInformationModal: true });\r\n }\r\n }>\r\n \r\n \r\n
\r\n {wishlistButton && renderWishlistButton(wishlistButton)}\r\n \r\n )}\r\n
\r\n
\r\n\r\n {product.Badge && (\r\n \r\n )}\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 show: boolean,\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 priceFailed?: boolean,\r\n priceErrorText?: string,\r\n productPrice?: ProductPrice\r\n): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n\r\n if (priceFailed) {\r\n return (\r\n \r\n \r\n {priceErrorText || 'Pris n/a'}\r\n \r\n \r\n )\r\n }\r\n\r\n if (!show) {\r\n return (\r\n \r\n \r\n ...\r\n \r\n \r\n )\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 imageProps.imageSettings.mode = 0;\r\n imageProps.imageSettings.viewports = {\r\n xs: { h: 200, w: 200, q: 'w=200&h=200&q=80&m=0&f=webp', qe: 't=200h200qhigh' },\r\n lg: { h: 200, w: 200, q: 'w=200&h=200&q=80&m=0&f=webp', qe: 't=200h200qhigh' },\r\n md: { h: 200, w: 200, q: 'w=200&h=200&q=80&m=0&f=webp', qe: 't=200h200qhigh' },\r\n sm: { h: 200, w: 200, q: 'w=200&h=200&q=80&m=0&f=webp', qe: 't=200h200qhigh' },\r\n xl: { h: 200, w: 200, q: 'w=200&h=200&q=80&m=0&f=webp', qe: 't=200h200qhigh' }\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n"],"names":["getDefaultSwatchSelected","coreContext","productData","_productData$Attribut","_attributeSwatches$fi","AttributeValues","dimensionToPreSelectInProductCard","app","config","attributeSwatches","find","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","Swatches","ArrayExtensions","item","IsDefault","updateProductUrl","productDetailsPageUrl","queryString","sourceUrl","URL","request","apiSettings","baseUrl","search","href","pathname","generateOrderTemplateNameDialogResources","resources","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","priceFree","originalPriceText","currentPriceText","generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","renderLabel","name","price","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","ratingAriaLabel","roundedRating","toFixed","format","renderPrice","context","typeName","id","show","basePrice","adjustedPrice","savingsText","isPriceMinMaxEnabled","priceResources","priceFailed","priceErrorText","productPrice","BasePrice","AdjustedPrice","CustomerContextualPrice","React","className","PriceComponent","data","renderProductPlacementImage","imageSettings","gridSettings","imageUrl","fallbackImageUrl","altText","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","src","fallBackSrc","imageProps","cropFocalRegion","mode","viewports","xs","h","w","q","qe","lg","md","sm","xl","Image","Object","assign","requestContext","actionContext","loadFailureBehavior","bypassHideOnFailure","ProductComponent","msdyn365Commerce","_objectSpread","component","_ref","_data$cart$cart$CartL","_data$cart","_data$cart$cart","_data$cart$cart$CartL2","_data$cart$cart$CartL3","_product$Name","_product$RecordId","_getProductImageUrlFr","_getProductPageUrlFro","_product$AgentImporte","_product$Producer","ratingCountAriaLabel","cartQueue","allowBack","telemetryContent","quickViewButton","productComparisonButton","wishlistButton","isEnabledProductDescription","disableBuyButton","showPrice","showAgreementProduct","buyAlwaysAdd","inventoryLabel","inventoryStatus","dimensionAvailabilities","swatchItemAriaLabel","addToCartText","updateCartText","removeFromCartText","outOfStockText","toastStrings","inCartTooltipText","transitTooltip","agreementProductTooltip","addToOrderTemplateResources","onUpdateOrderTemplates","retrieveOrderTemplates","onBuyValidate","locale","getLocale","product","simpleProduct","modal","setModal","useState","allergensModal","productInformationModal","cartQuantity","cart","CartLines","x","ProductId","RecordId","Quantity","orderQuantity","setOrderQuantity","breakoff","setBreakoff","productUrl","getProductPageUrlSync","Name","Number","MIN_VALUE","undefined","productImageUrlFromSwatch","defaultSwatch","swatchProductImageUrls","ProductImageUrls","generateImageUrl","PrimaryImageUrl","getProductImageUrlFromDefaultSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","cardActionsOpen","setCardActionsOpen","showCartCountTooltip","setShowCartCountTooltip","cardActionWrapperRef","temperatureZoneIcon","TemperatureZone","getTemperatureZoneIcon","forceUpdate","setForceUpdate","reaction","_data$cart2","_data$cart3","_data$cart3$cart$Cart","document","querySelectorAll","forEach","element","setAttribute","getAttribute","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","value","productPageUrlWithSwatch","includes","newUrl","searchParams","delete","toString","swatchProductImageUrl","productImageUrls","newImageUrl","payLoad","getPayloadObject","attribute","getTelemetryAttributes","baseClassName","unitOfMeasureDisplayType","shouldUseAlternativeProducer","AgentImporter","length","Producer","onClick","onTelemetryClick","cultureFormatter","formatCurrency","Price","AverageRating","TotalRatings","user","isAuthenticated","PriceFailed","ProductPrice","description","Description","ItemId","classnames","title","Transit","IsAgreementProduct","Brand","Manufacturer","inventoryAvailabilityLabel","_inventoryStatus$Stoc","_inventoryStatus$Stoc2","_inventoryStatus$Stoc3","availabilityClassName","IsProductAvailable","StockLevelLabel","startsWith","StockLevelCode","stockLevelLabel","substring","inventoryStatusText","renderProductAvailability","attributeValues","map","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","dimensionsToDisplayOnProductCard","dimensionsInProductCard","DimensionTypes","shouldDisplayDimension","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","itemId","colorHexCode","SwatchColorHexCode","SwatchImageUrl","isDefault","isDisabled","dimensionAvailability","_swatchItem$SwatchVal3","some","swatch","ProductComponentSwatchComponent","onSelectDimension","key","ProductListOrderQuantity","unitConversions","currentCount","onChange","newValue","inputQuantityAriaLabel","incrementButtonAriaLabel","decrementButtonAriaLabel","disabled","onBreakoffChange","hideRating","moduleTypeName","moduleId","avgRating","totalRatings","ariaLabel","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","_renderCartButton","_data$product14","_data$product15","_data$product16","_data$product17","_data$product18","_data$product19","_data$product20","_data$product21","_data$product22","_data$product23","_data$product24","_data$product25","_data$cart4","_data$cart4$cart$Cart","product1","ProductTypeValue","DefaultUnitOfMeasure","MasterProductId","ExtensionProperties","productDimensionAvailabilities","masterProductId","cartCount","filter","reduce","acc","val","cartCountId","tooltipString","tooltipText","onMouseOver","onMouseOut","onTouchStart","Tooltip","isOpen","target","Node","AddToCartComponent","hasAvailableProducts","productAvailability","AvailableQuantity","productSearch","quantity","onUpdateQuantity","onAdd","e","prev","open","tabIndex","current","onBlur","_cardActionWrapperRef","contains","relatedTarget","ref","quickview","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","Value","selectedProductId","renderQuickView","catalogId","renderProductComparisonButton","getCatalogId","AllergensModal","onClose","allergens","async","_data$customerInforma","customerInformation","IsB2b","AddToOrderTemplateComponent","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","_data$product","_data$product2","_data$product3","_data$product4","_data$product5","_data$product6","_data$product7","_data$product8","_data$product9","_data$product10","_data$product11","_data$product12","showButtonTooltip","onSuccess","_data$product13","orderTemplate","toast","text","autoClose","canClose","position","type","showProgress","ProductInformationModal","productInformationTitle","Badge","DiscountBadge","badge","size"],"sourceRoot":""}