{"version":3,"file":"static/js/bcd88fc69e789753d9b7.bundle.js","mappings":"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","sources":["webpack://msdyn365.commerce.online/./src/modules/c-search-result-container/components/product-component-swatch.tsx?c9e9","webpack://msdyn365.commerce.online/./src/themes/peruvian/views/components/product.component.tsx?2738"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport React from 'react';\r\n\r\nimport { ISwatchItem, SwatchComponent } from '../../../common/components/swatch';\r\nimport { ICBuyboxProps, ICBuyboxData } from '../../../modules/c-buybox';\r\n\r\n/**\r\n * Props for product component swatch.\r\n */\r\nexport interface IProductComponentSwatchProps {\r\n context: ICoreContext;\r\n swatches: ISwatchItem[];\r\n dimensionType?: string;\r\n onSelectDimension(coreContext: ICoreContext, swatchItem: ISwatchItem, dimensionType?: string): void;\r\n moduleProps: ICBuyboxProps;\r\n}\r\n\r\n/**\r\n * Swatch for the product component.\r\n * @param props - Swatch props.\r\n * @returns React element.\r\n */\r\nexport const ProductComponentSwatchComponent: React.FC = (props: IProductComponentSwatchProps) => {\r\n const { context, dimensionType, swatches, onSelectDimension } = props;\r\n\r\n const onSelectItem = React.useCallback((item: ISwatchItem) => {\r\n onSelectDimension(context, item, dimensionType);\r\n }, [onSelectDimension, context, dimensionType]);\r\n if (ArrayExtensions.hasElements(swatches)) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageProps,\r\n IImageSettings,\r\n Image,\r\n IRequestContext,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeSwatch, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n checkIfShouldDisplayAsSwatch,\r\n convertDimensionTypeToProductDimensionType,\r\n Dictionary,\r\n DimensionSwatchDisplayTypes,\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\nimport React, { useState, useEffect } from 'react';\r\n\r\n// import { IPriceComponentResources, PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\r\nimport { PriceComponent } from '../../../../modules/c-buybox/components/c-price.component';\r\n// import { ISwatchItem } from '@msdyn365-commerce/components';\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ISwatchItem } from '../../../../common/components/swatch';\r\n// import { ProductComponent } from '@msdyn365-commerce/components';\r\nimport { ProductComponentSwatchComponent } from '../../../../modules/c-search-result-container/components/product-component-swatch';\r\nimport { toJS } from 'mobx';\r\nimport { ICProductsDimensionsAvailabilities } from '../../../../modules/c-search-result-container/actions/c-get-dimension-availabilities-for-product-search-result.action';\r\nimport { ICBuyboxProps, ICBuyboxData } from '../../../../modules/c-buybox';\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 inventoryLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n dimensionAvailabilities?: ICProductsDimensionsAvailabilities[][];\r\n moduleProps?: ICBuyboxProps;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\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 inventoryLabel,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n dimensionAvailabilities,\r\n moduleProps\r\n}) => {\r\n const product = data.product;\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 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\n function 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 (!ArrayExtensions.hasElements(colorAttribute?.Swatches)) {\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;\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\n function 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 * 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 const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n if (!defaultSwatch || !defaultSwatch.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\r\n const queryString = `color=${queryStringEncoded}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n }\r\n\r\n let productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined) : '';\r\n if (allowBack && productUrl) {\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 = productPageUrlFromSwatch, setProductPageUrl] = useState();\r\n const [productImageUrl = productImageUrlFromSwatch, setProductImageUrl] = useState();\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n function getNBisDisableFlag(\r\n dimensionAvailabilities: ICProductsDimensionsAvailabilities[][] | undefined,\r\n swatchItem: AttributeSwatch,\r\n type: string\r\n ): boolean | undefined {\r\n if (dimensionAvailabilities) {\r\n let val: boolean | undefined;\r\n if (type === 'NB') {\r\n const timer = setTimeout(() => {\r\n for (let i = 0; i < dimensionAvailabilities.length; i++) {\r\n val = dimensionAvailabilities[i].find(dimensionAvail => {\r\n return dimensionAvail.value === swatchItem.SwatchValue;\r\n })?.NB;\r\n if (val) {\r\n break;\r\n }\r\n }\r\n }, 1000);\r\n clearTimeout(timer);\r\n return val;\r\n } else {\r\n const timer = setTimeout(() => {\r\n for (let i = 0; i < dimensionAvailabilities.length; i++) {\r\n val = dimensionAvailabilities[i].find(dimensionAvail => {\r\n return dimensionAvail.value === swatchItem.SwatchValue;\r\n })?.isDisabled;\r\n if (val) {\r\n break;\r\n }\r\n }\r\n }, 1000);\r\n clearTimeout(timer);\r\n return val;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n console.log('Product Attrs', product.AttributeValues);\r\n const swatchItems = ArrayExtensions.validValues(\r\n product.AttributeValues?.map(item => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(\r\n dimensionTypeValue as DimensionTypes,\r\n context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n );\r\n if (!shouldDisplayAsSwatch) {\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\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n let filteredSwatches: AttributeSwatch[] | undefined = [];\r\n if (enableStockCheck && context.app.config.disableStockCheckInAppForBackorderableProducts) {\r\n item.Swatches?.forEach(swatchItem => {\r\n if (ArrayExtensions.hasElements(dimensionAvailabilities) && ArrayExtensions.hasElements(dimensionAvailabilities?.[0])) {\r\n const selectedIndex = dimensionAvailabilities?.[0].findIndex(dim => dim.value === swatchItem.SwatchValue);\r\n if (selectedIndex >= 0) {\r\n filteredSwatches?.push(swatchItem);\r\n }\r\n }\r\n });\r\n } else {\r\n filteredSwatches = item.Swatches;\r\n }\r\n const swatches =\r\n filteredSwatches?.map((swatchItem: AttributeSwatch) => {\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 NB: getNBisDisableFlag(dimensionAvailabilities, swatchItem, 'NB'),\r\n isDisabled: enableStockCheck && getNBisDisableFlag(dimensionAvailabilities, swatchItem, 'isD'),\r\n dimensionId: swatchItem.SwatchValue ?? '',\r\n inventoryCode: swatchItem.SwatchColorHexCode ?? '',\r\n itemNumber: product.ItemId\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 { recordId: item.RecordId, swatches };\r\n })\r\n );\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 const queryString = `${swatchItems[0]?.swatches.length === 1 ? `${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, swatchItems]\r\n );\r\n\r\n const refine = getParameterByName('refiners');\r\n\r\n let refineIntoStringArray = refine as string;\r\n\r\n let attributes = toJS(product.AttributeValues);\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\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 function 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\n function renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {inventoryAvailabilityLabel}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(swatchItems)) {\r\n return null;\r\n }\r\n let buyboxProps: ICBuyboxProps;\r\n if (moduleProps) {\r\n buyboxProps = moduleProps;\r\n }\r\n return (\r\n
\r\n {swatchItems.map(item => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param quickview - Quick view node.\r\n * @param item - Product id to de displayed in quickview.\r\n * @returns The product quickview component.\r\n */\r\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n if (quickview === null) {\r\n return undefined;\r\n }\r\n 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 /**\r\n * Gets the aria label for rating.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Aria label format for rating.\r\n * @returns The product rating aria label string.\r\n */\r\n function getRatingAriaLabel(rating?: number, ratingAriaLabelText?: string): string {\r\n if (rating && ratingAriaLabelText) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabelText || '', roundedRating, '5');\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label for review count.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Aria label format for review.\r\n * @returns The product review count aria label string.\r\n */\r\n function 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\n /**\r\n * Gets the aria label string for product that includes product name with its price and rating.\r\n * @param name - Product name.\r\n * @param price - Product price.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Rating aria label text.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Number of ratings.\r\n * @returns The aria label string for the product card.\r\n */\r\n function 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\n function allLetter(inputtxt: any) {\r\n let arr = inputtxt;\r\n let insidArrays = [];\r\n var code: any;\r\n let finalArr: Array = [];\r\n if (arr !== null) {\r\n for (let i = 0; i < arr.length; i++) {\r\n insidArrays = arr[i];\r\n for (let k = 0; k < insidArrays.length; k++) {\r\n let tempString = insidArrays[k];\r\n for (let j = 0; j < (tempString?.length as number); j++) {\r\n code = tempString?.charCodeAt(j);\r\n if (!(code > 47 && code < 58) && !finalArr.includes(tempString as string)) {\r\n finalArr.push(tempString as string);\r\n\r\n break;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return finalArr;\r\n }\r\n return null;\r\n }\r\n\r\n function extractTextValueFromAttributes(attributes?: any[]) {\r\n if (attributes !== null) {\r\n for (let i = 0; i < (attributes?.length as any); i++) {\r\n if (attributes && attributes[i].Name == 'Color') {\r\n return attributes[i].TextValue.split('|');\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n function compareRefineArrayAndAttributeArray(refineArray: any, attributeArray: any) {\r\n let finalArray = [];\r\n for (let i = 0; i < refineArray.length; i++) {\r\n for (let j = 0; j < attributeArray.length; j++) {\r\n if (refineArray[i] == attributeArray[j]) {\r\n finalArray.push(refineArray[i]);\r\n }\r\n }\r\n }\r\n\r\n if (finalArray.length > 0) {\r\n return finalArray[0];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param productCardimageSettings - Module image settings for product card.\r\n * @param gridSettings - Grid settings defined in theme.\r\n * @param imageUrl - Image url.\r\n * @param fallbackImageUrl - Fallback url for imge.\r\n * @param altText - Image Alt text.\r\n * @param requestContext - Request context using the component.\r\n * @returns React component for product image.\r\n */\r\n function renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n requestContext?: IRequestContext,\r\n refineIntoStringArray?: string,\r\n attributes?: any[],\r\n itemId?: string\r\n ): JSX.Element | null {\r\n let refineColorArray = [];\r\n if (allLetter(refineIntoStringArray as any) !== null) {\r\n refineColorArray = allLetter(refineIntoStringArray as any) as any;\r\n }\r\n\r\n let attributesTextValues = [];\r\n attributesTextValues = extractTextValueFromAttributes(attributes);\r\n\r\n let color = compareRefineArrayAndAttributeArray(refineColorArray, attributesTextValues);\r\n\r\n let url = imageUrl;\r\n if (refineColorArray.length > 0) {\r\n let tempUrl = url?.split('=/Products%2F');\r\n url = tempUrl && tempUrl[0] + '=/Products%2F' + `${itemId} ^ ^ ^ ${color} ^_000_001.jpg`;\r\n } else {\r\n let tempImg = url?.split('_000_')[1];\r\n let tempImgUrl = url?.split('_000_')[1].split('.jpg');\r\n if (tempImgUrl && tempImgUrl[0] !== undefined) tempImgUrl[0] = tempImgUrl[0].replace('001', 'PLP');\r\n\r\n let repImgCred = tempImg?.split('.')[0];\r\n if (tempImgUrl && tempImgUrl[0] !== undefined) url = url?.replace(repImgCred + '', tempImgUrl && tempImgUrl[0]);\r\n }\r\n\r\n if (!url || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n const image: IImageData = {\r\n src: url,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageUrl\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n imageProps.gridSettings = gridSettings;\r\n imageProps.imageSettings = productCardimageSettings;\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return ;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param basePrice - Product base price.\r\n * @param adjustedPrice - Product adjusted price.\r\n * @param maxVariantPrice - Product variant max price.\r\n * @param minVariantPrice - Product variant min price.\r\n * @param savingsPriceResourceText - Product price saving text.\r\n * @param freePriceResourceText - Product price free text.\r\n * @param originalPriceResourceText - Product price original text.\r\n * @param currentPriceResourceText - Product price current text.\r\n * @returns React component for Product price.\r\n */\r\n function renderPrice(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n maxVariantPrice?: number,\r\n minVariantPrice?: number,\r\n savingsPriceResourceText?: string,\r\n freePriceResourceText?: string,\r\n originalPriceResourceText?: string,\r\n currentPriceResourceText?: string\r\n ): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice,\r\n MaxVariantPrice: maxVariantPrice ? maxVariantPrice : adjustedPrice,\r\n MinVariantPrice: minVariantPrice ? minVariantPrice : adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param description - Product description.\r\n * @returns The product description component.\r\n */\r\n function renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param avgRating - Average rating.\r\n * @param totalRatings - Total rating.\r\n * @param ariaLabel - Aria label for rating.\r\n * @returns React component for Product rating.\r\n */\r\n function 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 ): 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\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.actionContext.requestContext,\r\n refineIntoStringArray,\r\n attributes,\r\n product.ItemId\r\n )}\r\n
\r\n

{product.Name}

\r\n \r\n {renderProductDimensions()}\r\n
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n product.MaxVariantPrice,\r\n product.MinVariantPrice,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n {renderProductAvailability(inventoryLabel)}\r\n
\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n \r\n );\r\n};\r\n\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): any | null => {\r\n if (requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\nfunction getParameterByName(name: string, url = '') {\r\n useEffect(() => {\r\n // Update the document title using the browser API\r\n url = window.location.href;\r\n });\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return JSON.parse(decodeURIComponent(results[2].replace(/\\+/g, ' ')));\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":["ProductComponentSwatchComponent","props","context","dimensionType","swatches","onSelectDimension","onSelectItem","React","item","ArrayExtensions","hasElements","SwatchComponent","className","apiSettings","request","list","requestContext","resources","moduleProps","dropdownId","parseQueryParam","key","query","JSON","parse","decodeURIComponent","ProductComponent","msdyn365Commerce","createComponentOverride","component","data","imageSettings","savingsText","freePriceText","originalPriceText","currentPriceText","ratingAriaLabel","ratingCountAriaLabel","allowBack","typeName","id","telemetryContent","quickViewButton","inventoryLabel","isPriceMinMaxEnabled","priceResources","dimensionAvailabilities","product","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","URL","baseUrl","search","href","pathname","getDefaultColorSwatchSelected","productData","AttributeValues","colorAttribute","find","attributeValue","KeyName","toLocaleLowerCase","DimensionTypes","color","Swatches","IsDefault","productUrl","getProductPageUrlSync","Name","RecordId","actionContext","undefined","productImageUrlFromSwatch","app","config","dimensionToPreSelectInProductCard","none","PrimaryImageUrl","defaultSwatch","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","getNBisDisableFlag","swatchItem","type","val","timer","setTimeout","i","length","dimensionAvail","value","NB","clearTimeout","isDisabled","console","log","swatchItems","validValues","map","dimensionTypeValue","checkIfShouldDisplayAsSwatch","DimensionSwatchDisplayTypes","productCard","filteredSwatches","disableStockCheckInAppForBackorderableProducts","forEach","findIndex","dim","push","itemId","colorHexCode","SwatchColorHexCode","imageUrl","SwatchImageUrl","productImageUrls","isDefault","dimensionId","inventoryCode","itemNumber","ItemId","some","swatch","recordId","updatePageAndImageUrl","setValue","StringExtensions","isNullOrWhitespace","productPageUrlWithSwatch","includes","newUrl","searchParams","delete","toString","swatchProductImageUrl","newImageUrl","refineIntoStringArray","name","url","useEffect","window","location","replace","results","RegExp","exec","getParameterByName","attributes","toJS","payLoad","getPayloadObject","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","getRatingAriaLabel","rating","ratingAriaLabelText","roundedRating","toFixed","format","getReviewAriaLabel","reviewCount","ratingCountAriaLabelText","allLetter","inputtxt","arr","insidArrays","code","finalArr","k","tempString","j","charCodeAt","onClick","onTelemetryClick","price","reviewCountArialableText","renderLabel","cultureFormatter","formatCurrency","Price","AverageRating","TotalRatings","productCardimageSettings","gridSettings","fallbackImageUrl","altText","refineColorArray","attributesTextValues","TextValue","split","extractTextValueFromAttributes","refineArray","attributeArray","finalArray","compareRefineArrayAndAttributeArray","tempUrl","tempImg","tempImgUrl","repImgCred","image","src","fallBackSrc","imageProps","cropFocalRegion","Image","loadFailureBehavior","renderProductPlacementImage","buyboxProps","renderProductDimensions","moduleTypeName","moduleId","basePrice","adjustedPrice","maxVariantPrice","minVariantPrice","savingsPriceResourceText","freePriceResourceText","originalPriceResourceText","currentPriceResourceText","BasePrice","AdjustedPrice","CustomerContextualPrice","MaxVariantPrice","MinVariantPrice","PriceComponent","renderPrice","unitOfMeasure","DefaultUnitOfMeasure","description","Description","hideRating","avgRating","totalRatings","ariaLabel","numberRatings","Number","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","Value","selectedProductId","renderQuickView"],"sourceRoot":""}