{"version":3,"file":"static/js/cc8bccb658cece4a3967.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/allRegex.ts?9889","webpack://mattressfirm/./src/connectors/msdyn365-geoLookup-maxmind/msdyn365-geoLookup-maxmind.provider.ts?c852","webpack://mattressfirm/./src/connectors/msdyn365-geoLookup-maxmind/msdyn365-seg-test-1.provider.ts?9d7c","webpack://mattressfirm/./src/themes/mattressfirm/views/components/delivery-message/deliverymessage.component.tsx?e440","webpack://mattressfirm/./src/themes/mattressfirm/views/components/price/split-price.tsx?ee35","webpack://mattressfirm/./src/themes/mattressfirm/views/components/price/price.component.tsx?5d2f","webpack://mattressfirm/./src/themes/mattressfirm/views/components/product.component.tsx?8ce2","webpack://mattressfirm/./src/Utilities/convert-to-titlecase.ts?8d6f","webpack://mattressfirm/./src/themes/mattressfirm/views/components/rating.component.tsx?6883","webpack://mattressfirm/./src/themes/mattressfirm/views/components/selectable-card/selectable-card.component.tsx?a7a2","webpack://mattressfirm/./lib/component-registration.js?266e","webpack://mattressfirm/./lib/connector-registration.js?87e5","webpack://mattressfirm/./src/connectors/msdyn365-exp-test/msdyn365-exp-test.listener.ts?1431","webpack://mattressfirm/./src/connectors/msdyn365-exp-test/msdyn365-exp-test.provider.ts?04ad","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nexport const emailRegex = (emailValue: string) => {\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n const validationEmail = /^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]+(?:-+[a-z0-9]+)*\\.)+(?:xn--[a-z0-9]+|[a-z]{2,16})$/i;\r\n\r\n return validationEmail.test(emailValue);\r\n};\r\n\r\n\r\n/**\r\n * Method to remove special characters for product name from product URL\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialChars = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n return str.replace(/[^a-zA-Z0-9- ]/g, '');\r\n }\r\n return str;\r\n};\r\n\r\n\r\n/**\r\n * Method to remove special characters for product URL's path\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialCharsFromURLPath = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n const urlPath = decodeURIComponent(str.split('.p')[0]).replace(/[^a-zA-Z0-9-/ ]/g, '');\r\n return `${urlPath}.p`;\r\n }\r\n return str;\r\n};\r\n","import { WebServiceClient } from '@maxmind/geoip2-node';\r\nimport msdyn365Commerce, { IGeoLocation, IGeoLookupProvider, IRequestContext, ISecretValue } from '@msdyn365-commerce/core';\r\n\r\n// tslint:disable-next-line:completed-docs\r\nclass MsDyn365GeoLookupConnector implements IGeoLookupProvider {\r\n\r\n public initialize(): Promise {\r\n return Promise.resolve(true);\r\n }\r\n\r\n public async getGeoInformation(ip: string, ctx: IRequestContext): Promise {\r\n const secretAccountId: ISecretValue | undefined = await msdyn365Commerce.secretManager?.getSecretValue('mm-account-id', ctx.apiSettings.baseUrl);\r\n const secretLicenseKey: ISecretValue | undefined = await msdyn365Commerce.secretManager?.getSecretValue('mm-license-key', ctx.apiSettings.baseUrl);\r\n const client = new WebServiceClient(secretAccountId?.value || '', secretLicenseKey?.value || '');\r\n const maxmindData = await client.city(ip);\r\n const state = maxmindData.subdivisions && maxmindData.subdivisions.length > 0 ? maxmindData.subdivisions[0].isoCode : '';\r\n // Metro code property added for targetting functionlaity (Murali)\r\n const metroCode = maxmindData.location && maxmindData.location.metroCode && maxmindData.location.metroCode.toString() || '';\r\n const geoLocation: IGeoLocation = {\r\n country: maxmindData.country?.isoCode,\r\n city: maxmindData.city?.names.en,\r\n region: state,\r\n zipCode: maxmindData.postal?.code,\r\n metroCode\r\n };\r\n return Promise.resolve(geoLocation);\r\n }\r\n}\r\n\r\nconst connector = new MsDyn365GeoLookupConnector();\r\nexport default connector;","/*!\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 { ISegmentationProvider, ISementations } from '@msdyn365-commerce/core';\r\nimport Cookies from 'universal-cookie';\r\nconst UserConsentCookieName = '_msdyn365___ucc_';\r\nconst cookieOptionsWithDefaults = { path: '/', maxAge: 31536000, secure: true };\r\n\r\n// set cookie to track sessions for new site\r\nconst cookies = new Cookies();\r\ncookies.set(UserConsentCookieName, Date.now(), cookieOptionsWithDefaults);\r\n\r\n/**\r\n * A basic implementation of the ExperimentationProvider interface used for testing\r\n */\r\nclass MsDyn365GeoLookupTestConnector implements ISegmentationProvider {\r\n private testSegments = {\r\n 101: '25'\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public initialize(config: any): Promise {\r\n console.log(`MsDyn365 Segmentation Test Connector called with config: ${JSON.stringify(config)}`);\r\n return Promise.resolve(true);\r\n }\r\n\r\n public async getSegmentations(userId: string, segmentationIds: string[]): Promise {\r\n console.log(`MsDyn365 Segmentation Test Connector will resolve segments - ${segmentationIds} for ${userId}`);\r\n\r\n return Promise.resolve(this.testSegments);\r\n }\r\n}\r\n\r\nconst connector = new MsDyn365GeoLookupTestConnector();\r\nexport default connector;\r\n","import { ICoreContext, IGeneric, IAny } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, CommerceProperty } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport { IBrandListData } from '../../../../../modules/mfrm-buybox/mfrm-buybox.view';\r\nimport { _getSoonestDeliveryDate, _makeDeliveryMessage } from '../../../../../Utilities/product-search-result-utils';\r\nimport { ProductSearchResultExtended } from '../../../custom-components/product-search-result-items';\r\nimport CustomSkeleton from '../../../custom-components/CustomSkeleton';\r\ninterface IDeliveryMessage {\r\n product?: ProductSearchResultExtended;\r\n context: ICoreContext>;\r\n isMasterProduct?: boolean;\r\n attributeValues?: AttributeValue[];\r\n extensionProperties?: CommerceProperty[];\r\n lowestPriceVariantRecordId?: string;\r\n}\r\n\r\n//TODO: common method; move to general utility file. AND change return type to an Enumeration\r\nexport const _getProductType = (shippingInformation: string | undefined): string => {\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'delivery') {\r\n return 'Core';\r\n }\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'parcel') {\r\n return 'Small Parcel';\r\n }\r\n if (shippingInformation && shippingInformation.toLowerCase() === 'drop ship') {\r\n return 'Drop Ship';\r\n }\r\n return '';\r\n};\r\n\r\nexport const computeItemLines = (\r\n product: IDeliveryMessage['product'],\r\n defaultVariantId: number | undefined,\r\n lowestPriceVariantRecordId: string | undefined\r\n) => {\r\n if (product?.IsMasterProduct) {\r\n if (defaultVariantId && defaultVariantId !== 0) {\r\n return defaultVariantId.toString();\r\n }\r\n if (lowestPriceVariantRecordId && lowestPriceVariantRecordId !== '') {\r\n return lowestPriceVariantRecordId;\r\n }\r\n }\r\n return product?.RecordId.toString();\r\n};\r\n\r\nconst DeliveryMessage: React.FC = ({\r\n product,\r\n context,\r\n attributeValues,\r\n extensionProperties,\r\n lowestPriceVariantRecordId\r\n}) => {\r\n let productDeliveryMessage = '';\r\n const { app } = context;\r\n const shippingInformationSmall = attributeValues && attributeValues.find(\r\n (attr: AttributeValue) => attr.Name?.trim() === app.config.smallParcelAttributeKey\r\n )?.TextValue?.toLowerCase();\r\n\r\n const defaultVariantShippingInformation = extensionProperties && extensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantShippingInformation\"\r\n )?.Value?.StringValue;\r\n\r\n if ((_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Core') {\r\n productDeliveryMessage = product?.deliveryByMessage ?? '';\r\n } else if ((\r\n (_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Small Parcel' ||\r\n (_getProductType(defaultVariantShippingInformation || shippingInformationSmall)) === 'Drop Ship'\r\n )) {\r\n let deliveryDays =\r\n attributeValues && attributeValues.find(attr => attr.Name?.trim() === app.config.leadTime)?.TextValue;\r\n if (\r\n (deliveryDays === '' || deliveryDays === undefined || deliveryDays === null) &&\r\n app.config.brandList &&\r\n app.config.brandList.length > 0\r\n ) {\r\n const brand =\r\n attributeValues &&\r\n attributeValues.find(\r\n attr =>\r\n app.config.brandBackofficeAttributePlp &&\r\n attr.Name?.trim() === app.config.brandBackofficeAttributePlp\r\n )?.TextValue?.toLowerCase();\r\n\r\n if (brand !== undefined && brand !== null && brand !== '') {\r\n app.config.brandList.map((singleBrand: IBrandListData) => {\r\n if (singleBrand.brandName.toLowerCase() === brand) {\r\n deliveryDays =\r\n singleBrand.brandLeadtime !== undefined &&\r\n singleBrand.brandLeadtime !== '' &&\r\n singleBrand.brandLeadtime !== null\r\n ? singleBrand.brandLeadtime\r\n : '';\r\n }\r\n });\r\n }\r\n deliveryDays = app.config.brandList[0].brandLeadtime;\r\n }\r\n if (deliveryDays && productDeliveryMessage === '') {\r\n productDeliveryMessage = _makeDeliveryMessage(deliveryDays);\r\n }\r\n }\r\n\r\n return productDeliveryMessage ? (\r\n
\r\n {productDeliveryMessage}\r\n
\r\n ) : ;\r\n};\r\n\r\nexport default DeliveryMessage;","export const splitPrice = (price: number | boolean | undefined) => {\r\n if (price === 0) {\r\n return { dollars: \"0\", cents: \"\" };\r\n }\r\n const formattedPrice = price?.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: \"USD\"\r\n });\r\n\r\n const priceArr = formattedPrice?.match(/(\\d|,)+/g);\r\n\r\n const dollars = priceArr?.[0] || \"0\";\r\n const cents = priceArr?.[1] || \"00\";\r\n\r\n return { dollars, cents };\r\n};\r\n","import React from 'react';\r\nimport { splitPrice } from \"./split-price\";\r\n\r\nexport interface PriceProps {\r\n standard: number;\r\n current: number | false | undefined;\r\n}\r\n\r\nexport const Price:React.FC = ({ standard, current }) => {\r\n const { dollars: standardDollars, cents: standardCents } = splitPrice(\r\n standard\r\n );\r\n const { dollars: currentDollars, cents: currentCents } = splitPrice(current);\r\n\r\n return (\r\n
\r\n {current && (\r\n
\r\n ${currentDollars}\r\n {currentCents}\r\n
\r\n )}\r\n
\r\n ${standardDollars}\r\n {standardCents}\r\n {current &&
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Price;\r\n","import { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent, RatingComponent, IPriceComponentResources } from '@msdyn365-commerce/components';\r\nimport { CommerceProperty } from '@msdyn365-commerce/retail-proxy';\r\nimport MsDyn365, {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageSettings,\r\n IImageProps,\r\n Image,\r\n IRequestContext,\r\n msdyn365Commerce,\r\n RichTextComponent\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\n// VSI Customization - starts\r\nimport { convertToTitlecase } from '../../../../Utilities/convert-to-titlecase';\r\nimport { getBVAttributeValues } from '../../../../Utilities/get-bv-attributes';\r\nimport { buildProductBadge, parseBadgeData } from '../../../../Utilities/get-product-badge';\r\nimport { parseBrandName } from '../../../../Utilities/get-product-brand';\r\nimport {\r\n _coreProductATPCall,\r\n _getEyebrowMessage,\r\n _getSoonestDeliveryDate,\r\n _makeDeliveryMessage\r\n} from '../../../../Utilities/product-search-result-utils';\r\nimport { FinancingPerMonthComponent } from '../../custom-components/financing-per-month-component';\r\nimport DeliveryMessage from './delivery-message';\r\nimport { BVRatingSummary } from '../../../../Utilities/components/BVRatingSummary';\r\nimport { removeSpecialChars} from '../../../../Utilities/allRegex';\r\nimport CustomSkeleton from '../../custom-components/CustomSkeleton';\r\n// VSI Customization - ends\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 allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n eyebrowMessage?: string | undefined;\r\n badgeAttribute?: string;\r\n deliveryMessage?: string;\r\n isRefinersEnabled?: boolean;\r\n // VSI Customization - Copied following 3 props from OOTB product.component to be used in product recommendations for Cart\r\n ratingCountAriaLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n // Customized props for product recommendation on Cart page\r\n displayShopNow?: boolean;\r\n showBvRatings?:boolean;\r\n shopNowBtnText?: string;\r\n}\r\n\r\nexport interface IEyebrowMessageDimensions {\r\n height: number;\r\n visibleHeight: number;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent { }\r\n\r\nconst PriceComponentActions = {};\r\n\r\n// tslint:disable-next-line: max-func-body-length cyclomatic-complexity\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 allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n eyebrowMessage,\r\n badgeAttribute,\r\n deliveryMessage,\r\n isRefinersEnabled,\r\n displayShopNow,\r\n shopNowBtnText,\r\n showBvRatings\r\n}) => {\r\n // VSI Customization - starts\r\n const {\r\n app: {\r\n config: { brandBackofficeAttributePlp, enableAttributeBasedRating }\r\n }\r\n } = context;\r\n const getEyebrowElementRef = React.useRef(null);\r\n const eyebrowElement = getEyebrowElementRef.current?.querySelector('.mfrm-eyebrow__button-plp') as Element;\r\n const [isTruncated, setTruncated] = React.useState({\r\n height: eyebrowElement?.scrollHeight,\r\n visibleHeight: eyebrowElement?.clientHeight\r\n });\r\n\r\n const badgeAttributeToUse = context.app.config.productBadgeAttribute;\r\n // VSI Customization - ends\r\n const product = data.product;\r\n if (!product) {\r\n return null;\r\n }\r\n // VSI Customization - starts\r\n /** When enabled rating values will be picked from BazaarVoice attributes created on product.\r\n * If disabled rating will be shown from OOTB properties on a product.\r\n * This will be used for PLP and product-collection/product recommendations\r\n */\r\n const { AttributeValues, ExtensionProperties } = product;\r\n let isBVratings = false;\r\n if (AttributeValues && AttributeValues?.find(attr => attr.Name?.trim() === \"BVAverageOverallRating\")) {\r\n isBVratings = true;\r\n }\r\n const averageRating = enableAttributeBasedRating && AttributeValues && isBVratings ? getBVAttributeValues(AttributeValues, 'BVAverageOverallRating') : _parseValue(product?.AverageRating);\r\n const totalRatings = enableAttributeBasedRating && AttributeValues && isBVratings ? getBVAttributeValues(AttributeValues, 'BVTotalReviewCount') : _parseValue(product?.TotalRatings);\r\n React.useEffect(() => {\r\n function handleResize(): void {\r\n setTruncated({\r\n height: eyebrowElement?.scrollHeight,\r\n visibleHeight: eyebrowElement?.clientHeight\r\n });\r\n }\r\n handleResize();\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n } else {\r\n return () => null;\r\n }\r\n }, [eyebrowElement?.scrollHeight, eyebrowElement?.clientHeight]);\r\n // VSI Customization - ends\r\n const lowestPriceVariantRecordId = AttributeValues?.find(\r\n attr => attr.Name?.trim() === context.app.config.EcomLowestPriceVariantRecIdKey\r\n )?.TextValue;\r\n const unbxdDefaultVariant = product && product.ExtensionProperties?.find((property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\")?.Value?.LongValue;\r\n const queryBasedSelection = context.app.config.queryBasedVariantSelection;\r\n const fallBackImage = context.app.config.placeholderImageName;\r\n const defaultOrLowestVariantRecordId = unbxdDefaultVariant! > 0 ? unbxdDefaultVariant : product.RecordId;\r\n let productUrl = getProductPageUrlSync(removeSpecialChars(product?.Name!, context) || '', queryBasedSelection ? product.MasterProductId || product.RecordId : product.RecordId, context && context.actionContext, undefined);\r\n\r\n if (allowBack) {\r\n productUrl = updateProductUrl(productUrl, context);\r\n }\r\n if (queryBasedSelection) {\r\n const variantIdQueryParams = productUrl.includes('?') ? `&variantid=${defaultOrLowestVariantRecordId}` : `?variantid=${defaultOrLowestVariantRecordId}`;\r\n productUrl += variantIdQueryParams;\r\n }\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', defaultOrLowestVariantRecordId!.toString());\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n // VSI Customization -starts\r\n // #17772: Check the master product, if false then add size Refinement property otherwise show Starting at\r\n let sizeValue =\r\n product && !product?.IsMasterProduct && product?.ExtensionProperties && product?.ExtensionProperties?.length > 0\r\n ? product?.ExtensionProperties.find(i => i.Key === \"Size\")?.Value?.StringValue\r\n : '';\r\n sizeValue = sizeValue && convertToTitlecase(sizeValue);\r\n\r\n // Flag used on cart page to display ratings & shop now button\r\n const isCustomizedDesign = displayShopNow;\r\n\r\n if (typeName === 'product-collection') {\r\n // VSI Customization -starts\r\n const brandName = parseBrandName(AttributeValues, brandBackofficeAttributePlp);\r\n const productTitleWithBrandname = brandName ? `${brandName} ${product.Name}` : product.Name;\r\n // VSI Customization -end\r\n // tslint:disable:max-line-length\r\n return (\r\n
\r\n \r\n {
{renderProductBadge(badgeAttributeToUse, AttributeValues, context.request)}
}\r\n
\r\n {renderProductPlacementImage(\r\n imageSettings, context.request.gridSettings, product.PrimaryImageUrl,\r\n product.PrimaryImageUrl, product.Name, context.actionContext.requestContext, fallBackImage)}\r\n
\r\n \r\n
\r\n {/* VSI Customization - START */}\r\n {/* (ADO:23447) Added only class name conditionally as discounted price based on product.component if BasePrice > Price then it will be discounted else not */}\r\n product.Price\r\n ? 'msc-product discounted'\r\n : 'msc-product'\r\n : 'msc-product'\r\n }\r\n href={productUrl}\r\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\r\n aria-label={renderLabel(\r\n product.Name,\r\n context.cultureFormatter.formatCurrency(product.Price),\r\n product.AverageRating,\r\n ratingAriaLabel\r\n )}\r\n {...attribute}\r\n >\r\n {/* Todo: 'Starting at' string will be replaced with relevant resources */} {/* For cart page, price will be shown after name */}\r\n {!isCustomizedDesign &&\r\n <>\r\n {sizeValue ? sizeValue : product.Price !== 0 ? 'Starting at ' : ''}\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 }\r\n {!isCustomizedDesign &&\r\n \r\n {productTitleWithBrandname && productTitleWithBrandname.length > 40\r\n ? `${productTitleWithBrandname.slice(0, 40)}...`\r\n : productTitleWithBrandname}\r\n \r\n }\r\n {isCustomizedDesign &&\r\n \r\n {productTitleWithBrandname}\r\n \r\n }\r\n {isCustomizedDesign &&\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 }\r\n {/* todo : will be added when required in next sprints */}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, averageRating, totalRatings, ratingAriaLabel)}\r\n {isCustomizedDesign &&\r\n \r\n }\r\n {/* VSI Customization - END */}\r\n \r\n
\r\n {/* OOB Quick View */}\r\n {/* {quickViewButton && renderQuickView(quickViewButton, product.RecordId)} */}\r\n
\r\n );\r\n } else {\r\n const priceComponent = 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 const isSearchResultContainer = typeName === 'search-result-container' || typeName === 'mfrm-search-result-container';\r\n const brandName = parseBrandName(AttributeValues, brandBackofficeAttributePlp);\r\n return (\r\n // tslint:disable-next-line: react-this-binding-issue jsx-no-lambda\r\n
setProductUrl(productUrl)}>\r\n \r\n {isSearchResultContainer && (\r\n
\r\n {renderProductBadge(badgeAttributeToUse, AttributeValues, context.request)}\r\n
\r\n )}\r\n
\r\n {renderProductPlacementImage(\r\n imageSettings, context.request.gridSettings, product.PrimaryImageUrl,\r\n product.PrimaryImageUrl, product.Name, context.actionContext.requestContext, fallBackImage)}\r\n
\r\n \r\n\r\n
\r\n {/* VSI Customization - START */}\r\n
\r\n {/* VSI Customization - END */}\r\n {isSearchResultContainer && eyebrowMessage && (\r\n
\r\n
\r\n \r\n {isTruncated.height > isTruncated.visibleHeight ? (\r\n \r\n ) : (\r\n false\r\n )}\r\n
\r\n
\r\n )}\r\n {isSearchResultContainer && !eyebrowMessage && eyebrowMessage?.length !== 0 && !showBvRatings && (\r\n \r\n )}\r\n {isSearchResultContainer && eyebrowMessage?.length === 0 && !showBvRatings && (\r\n
\r\n
 
\r\n
\r\n )}\r\n {!context.app.config.hideRating && (data.product && showBvRatings) ? :\r\n (renderRating(context, typeName, id, averageRating, totalRatings, ratingAriaLabel) ? renderRating(context, typeName, id, averageRating, totalRatings, ratingAriaLabel) :\r\n
\r\n
 
\r\n
\r\n )}\r\n {/* VSI Customization - START */}\r\n
\r\n {/* VSI Customization - END */}\r\n \r\n \r\n {brandName ? `${brandName} ${product.Name}` : product.Name}\r\n \r\n\r\n {/* original price */}\r\n {!isSearchResultContainer && priceComponent}\r\n {renderDescription(product.Description)}\r\n \r\n {/* {deliveryMessage && <>{deliveryMessage}} */}\r\n \r\n
\r\n {/* new price */}\r\n {isSearchResultContainer\r\n ? product.Price\r\n ? priceComponent && (\r\n \r\n )\r\n : priceComponent\r\n : null}\r\n {/* OOB Quick View */}\r\n {/* {quickViewButton && renderQuickView(quickViewButton, product.RecordId)} */}\r\n
\r\n );\r\n }\r\n // VSI Customization - Ends here\r\n};\r\n// VSI Customization - Starts here\r\nfunction _parseValue(productRating?: string | number): number {\r\n const value = +(productRating || 0);\r\n return Math.round(value * 10) / 10;\r\n}\r\n// VSI Customization - Ends here\r\nfunction renderLabel(name?: string, price?: string, rating?: number, ratingAriaLabel?: string): string {\r\n name = name || '';\r\n price = price || '';\r\n return `${name} ${price} ${getRatingAriaLabel(rating, ratingAriaLabel)}`;\r\n}\r\n\r\nfunction setProductUrl(productUrl: string): void {\r\n if (MsDyn365.isBrowser) {\r\n window.location.href = productUrl;\r\n }\r\n}\r\n\r\nfunction renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n}\r\n\r\n// Render Quick View\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// return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item });\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 updateProductUrl(productUrl: string, context: ICoreContext): string {\r\n const srcUrl = new URL(productUrl, context.request.apiSettings.baseUrl);\r\n const queryString = 'back=true';\r\n if (srcUrl.search) {\r\n srcUrl.search += `&${queryString}`;\r\n } else {\r\n srcUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(srcUrl.href);\r\n return updatedUrl.pathname + srcUrl.search;\r\n}\r\n\r\nfunction renderRating(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string\r\n): JSX.Element | null {\r\n if (avgRating && avgRating !== 0) {\r\n const numRatings = (totalRatings && totalRatings.toString()) || '0';\r\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\r\n\r\n return (\r\n \r\n );\r\n } else {\r\n return null;\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): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n return basePrice ? (\r\n \r\n ) : 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 * @param fallBackImage - Placeholder Image from App settings\r\n * @returns React component for product image.\r\n */\r\nfunction renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings, gridSettings?: IGridSettings,\r\n imageUrl?: string, fallbackImageUrl?: string, altText?: string, requestContext?: IRequestContext, fallBackImage?: string): JSX.Element | null {\r\n\r\n if (!imageUrl || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = fallBackImage || '';\r\n let fallbackImageSource = fallbackImageUrl;\r\n if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n }\r\n const image: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n\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// VSI Customization - starts\r\n\r\nfunction renderProductBadge(\r\n attributeName: string | undefined,\r\n attributes: AttributeValue[] | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined {\r\n const badgeData =\r\n attributeName &&\r\n attributes?.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attributeName.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!badgeData) {\r\n return;\r\n }\r\n\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n // build product badge image components\r\n const finalizedBadges = parsedBadges.map(parsedBadge => parsedBadge && buildProductBadge(parsedBadge, requestContext));\r\n\r\n return finalizedBadges && <>{finalizedBadges};\r\n}\r\n\r\n// VSI Customization - ends\r\n\r\n// @ts-ignore\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;","export const convertToTitlecase = (stringValue?: string, stopConvert?: boolean) => {\r\n // this stopConvert flag will use to stop conversion in specific scenario\r\n return stopConvert\r\n ? stringValue\r\n : stringValue?.replace(/\\w\\S*/g, txt => {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\n\r\nexport interface IRatingComponentProps extends IComponentProps<{}> {\r\n readOnly: boolean;\r\n ariaLabel: string;\r\n avgRating: number;\r\n ratingCount?: string;\r\n initialRating?: number;\r\n hideCount?: boolean;\r\n className?: string;\r\n onChange?(value: number): void;\r\n}\r\nexport interface IRatingComponent extends IComponent {\r\n onSliderChanged(): (\r\n event: React.ChangeEvent,\r\n props: IRatingComponentProps,\r\n setRating: (rating: IRatingState) => void\r\n ) => void;\r\n onMouseOver(): (event: React.MouseEvent, rating: IRatingState, setRating: (rating: IRatingState) => void) => void;\r\n onClick(): (event: React.MouseEvent, props: IRatingComponentProps, setRating: (rating: IRatingState) => void) => void;\r\n onMouseLeave(): (event: React.MouseEvent, rating: IRatingState, setRating: (rating: IRatingState) => void) => void;\r\n}\r\n\r\ninterface IRatingState {\r\n rating: number;\r\n lastSelectedRating: number;\r\n}\r\n\r\nconst roundUpMin: number = 0.75;\r\nconst roundMidMin: number = 0.25;\r\nconst maxRating: number = 5;\r\n\r\nconst RatingComponentActions = {\r\n onSliderChanged(\r\n event: React.ChangeEvent,\r\n props: IRatingComponentProps,\r\n setRating: (rating: IRatingState) => void\r\n ): void {\r\n const value = Number.parseInt(event.target.value, 10);\r\n setRating({ rating: value, lastSelectedRating: value });\r\n\r\n if (props.onChange) {\r\n props.onChange(value);\r\n }\r\n },\r\n onMouseLeave(_event: React.MouseEvent, rating: IRatingState, setRating: (rating: IRatingState) => void): void {\r\n setRating({ rating: rating.lastSelectedRating, lastSelectedRating: rating.lastSelectedRating });\r\n },\r\n onMouseOver(event: React.MouseEvent, rating: IRatingState, setRating: (rating: IRatingState) => void): void {\r\n setRating({ rating: getIndex(event), lastSelectedRating: rating.lastSelectedRating });\r\n },\r\n onClick(event: React.MouseEvent, props: IRatingComponentProps, setRating: (rating: IRatingState) => void): void {\r\n if (!props.readOnly) {\r\n const index = getIndex(event);\r\n setRating({ rating: index, lastSelectedRating: index });\r\n\r\n if (props.onChange) {\r\n props.onChange(index);\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst Rating: React.FC = (props: IRatingComponentProps) => {\r\n const initialRating = props.readOnly ? props.avgRating : props.initialRating || 0;\r\n const [rating, setRating] = useState({ rating: initialRating, lastSelectedRating: initialRating });\r\n useEffect(() => {\r\n const newRating = props.readOnly ? props.avgRating : props.initialRating || 0;\r\n setRating({ rating: newRating, lastSelectedRating: newRating });\r\n }, [props]);\r\n const onChange = (event: React.ChangeEvent) => {\r\n RatingComponentActions.onSliderChanged(event, props, setRating);\r\n };\r\n const onMouseLeave = (event: React.MouseEvent) => {\r\n RatingComponentActions.onMouseLeave(event, rating, setRating);\r\n };\r\n const onMouseOver = (event: React.MouseEvent) => {\r\n RatingComponentActions.onMouseOver(event, rating, setRating);\r\n };\r\n const onClick = (event: React.MouseEvent) => {\r\n RatingComponentActions.onClick(event, props, setRating);\r\n };\r\n\r\n return (\r\n
0 ? 'msc-no-ratings' : ''} ${props.className ? props.className : ''}`}>\r\n {starControl(props.readOnly, rating.rating, props.ariaLabel, onChange)}\r\n
\r\n {renderStars(rating.rating, props, onMouseOver, onClick)}\r\n
\r\n {/* VSI Customization - START */}\r\n \r\n ({props.ratingCount})\r\n \r\n {/* VSI Customization - END */}\r\n
\r\n );\r\n};\r\n\r\n// Set default props\r\nRating.defaultProps = {\r\n avgRating: 0\r\n} as Partial;\r\n\r\nconst starControl = (\r\n readOnly: boolean,\r\n currentRating: number,\r\n ariaLabel: string,\r\n onChange: (event: React.ChangeEvent) => void\r\n): JSX.Element => {\r\n if (readOnly) {\r\n return
{ariaLabel}
;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst renderStars = (\r\n rating: number,\r\n props: IRatingComponentProps,\r\n mouseOver: (event: React.MouseEvent) => void,\r\n onClick: (event: React.MouseEvent) => void\r\n): JSX.Element[] => {\r\n const floor = Math.floor(rating);\r\n const remainder = rating - floor;\r\n const filled = remainder < roundUpMin ? floor : floor + 1;\r\n const half = roundMidMin <= remainder && remainder < roundUpMin ? filled + 1 : 0;\r\n const stars = [];\r\n\r\n for (let i = 1; i <= maxRating; i++) {\r\n const glyphClass = filled >= i ? 'msc-rating__star' : half === i ? 'msc-rating__half-star' : 'msc-rating__empty-star';\r\n stars.push(\r\n \r\n );\r\n }\r\n\r\n return stars;\r\n};\r\n\r\nconst getIndex = (event: React.MouseEvent): number => {\r\n const target = event.target as HTMLElement;\r\n return Number.parseInt(target.getAttribute('data-index')!, 10);\r\n};\r\n\r\n// @ts-ignore\r\nexport const RatingComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'Rating',\r\n { component: Rating, ...RatingComponentActions }\r\n);\r\n\r\nexport default RatingComponent;\r\n","import React from 'react';\r\nimport { Price } from '../price/price.component';\r\nexport interface SelectableCardProps {\r\n img: React.ReactNode;\r\n productName: string;\r\n ratings?: React.ReactNode;\r\n standardPrice?: false | number;\r\n currentPrice?: false | number | undefined;\r\n eyebrowText?: string;\r\n isActive?: boolean\r\n}\r\n\r\nconst SelectableCard:React.FC = ({ img, productName, ratings, standardPrice, currentPrice, eyebrowText, isActive = true }) => {\r\n return (\r\n
\r\n
{img}
\r\n
\r\n
{eyebrowText}
\r\n
{productName}
\r\n {ratings && (\r\n
\r\n {ratings}\r\n
\r\n )}\r\n {standardPrice && }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default SelectableCard;","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nexport const componentDictionary = {};\n\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|addtocart|addtocart'] = {\n c: () => require('partner/themes/mattressfirm/views/components/addtocart/addtocart.component.tsx'),\n cn: '__local__-__local__-addtocart'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|cartlineitem'] = {\n c: () => require('partner/themes/mattressfirm/views/components/cartlineitem.component.tsx'),\n cn: '__local__-__local__-cartlineitem'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|delivery-message|deliverymessage'] = {\n c: () => require('partner/themes/mattressfirm/views/components/delivery-message/deliverymessage.component.tsx'),\n cn: '__local__-__local__-deliverymessage'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|price|price'] = {\n c: () => require('partner/themes/mattressfirm/views/components/price/price.component.tsx'),\n cn: '__local__-__local__-price'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|product'] = {\n c: () => require('partner/themes/mattressfirm/views/components/product.component.tsx'),\n cn: '__local__-__local__-product'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|promocode'] = {\n c: () => require('partner/themes/mattressfirm/views/components/promocode.component.tsx'),\n cn: '__local__-__local__-promocode'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|rating'] = {\n c: () => require('partner/themes/mattressfirm/views/components/rating.component.tsx'),\n cn: '__local__-__local__-rating'\n };\ncomponentDictionary['__local__|__local__|themes|mattressfirm|views|components|selectable-card|selectable-card'] = {\n c: () => require('partner/themes/mattressfirm/views/components/selectable-card/selectable-card.component.tsx'),\n cn: '__local__-__local__-selectable-card'\n };","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\nconst { log, error } = console;\nconst detailedWebpackError = (msg, errorObject) => { error(msg); error(errorObject); process.env.NODE_ENV !== 'development' && error('Run in dev mode to see full list of errors'); process.exit(50); }\nconst handleError = (modPath, errObject) => {\n detailedWebpackError('Error with path: ' + modPath, errObject);\n}\n\nconst handleMissingImplementationDetails = (functionName, connectorName, connectorType) => {\n error('----ERROR: CONNECTOR MISSING IMPLEMENTATION DETAILS-----');\n error('Missing function ' + functionName + ' from ' + connectorType + ' implementation for experimentation connector ' + connectorName);\n throw new Error('Connector missing implementation details');\n}\n\nconst verifySegmentationRegistration = (connectorName) => {\n const segmentationProvider = connectorDictionary[connectorName].provider;\n try {\n if (!segmentationProvider.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!segmentationProvider.__proto__.getSegmentations) {\n handleMissingImplementationDetails('getSegmentations', connectorName, 'provider');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nconst isServer = ()=>{\n return ! (typeof window != 'undefined' && window.document);\n}\n\nconst verifyGeoLookupRegistration = (connectorName) => {\n const geoLookupProvider = connectorDictionary[connectorName].provider;\n try {\n if (!geoLookupProvider.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!geoLookupProvider.__proto__.getGeoInformation) {\n handleMissingImplementationDetails('getGeoInformation', connectorName, 'provider');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nconst verifyExperimentationReigstration = (connectorName) => {\n const connectorImpl = connectorDictionary[connectorName].provider;\n const connectorListenerImpl = connectorDictionary[connectorName].listener;\n try {\n if (!connectorImpl.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getConfigForClientSideInit) {\n handleMissingImplementationDetails('getConfigForClientSideInit', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.initializeClientSide) {\n handleMissingImplementationDetails('initializeClientSide', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getExperiments) {\n handleMissingImplementationDetails('getExperiments', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getVariantsForUser) {\n handleMissingImplementationDetails('getVariantsForUser', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.activateExperiment) {\n handleMissingImplementationDetails('activateExperiment', connectorName, 'provider');\n }\n if (!connectorListenerImpl.__proto__.initializeClientSide) {\n handleMissingImplementationDetails('initializeClientSide', connectorName, 'listener');\n }\n if (!connectorListenerImpl.__proto__.logEvent) {\n handleMissingImplementationDetails('logEvent', connectorName, 'listener');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nexport const connectorDictionary = {};\n\n\n {\n const connectorName = '100';\n \n let connectorProviderImpl = require('partner/connectors/msdyn365-geoLookup-maxmind/msdyn365-seg-test-1.provider');\n if (!connectorProviderImpl.default) {\n throw new Error('segmentation Connector provider 100 does not have a default export. Check the provider file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default};\n }\n\n {\n const connectorName = 'Optimizely';\n \n let connectorProviderImpl = require('@msdyn365-commerce-thirdpartyconnectors/exp-connector-optimizely/dist/lib/connectors/optimizely-connector/optimizely-connector.provider');\n let connectorListenerImpl = require('@msdyn365-commerce-thirdpartyconnectors/exp-connector-optimizely/dist/lib/connectors/optimizely-connector/optimizely-connector.listener');\n let connectorDomainsList = '';\n if (!connectorProviderImpl.default) {\n throw new Error('Exp Connector provider Optimizely does not have a default export. Check the provider file of the connector for a default export.');\n }\n if (!connectorListenerImpl.default) {\n throw new Error('Exp Connector listener Optimizely does not have a default export. Check the listener file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default, listener: connectorListenerImpl.default, connectorDomains: connectorDomainsList};\n }\n\n {\n const connectorName = 'geoLookup-maxmind';\n \n if (isServer()) {\n let connectorProviderImpl = require('partner/connectors/msdyn365-geoLookup-maxmind/msdyn365-geoLookup-maxmind.provider');\n if (!connectorProviderImpl.default) {\n throw new Error('Geo Lookup Connector provider geoLookup-maxmind does not have a default export. Check the provider file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default};\n }\n }\n\n {\n const connectorName = 'msdyn365-exp-test';\n \n let connectorProviderImpl = require('@msdyn365-commerce-modules/msdyn365-exp-test-connector/dist/lib/connectors/msdyn365-exp-test/msdyn365-exp-test.provider');\n let connectorListenerImpl = require('@msdyn365-commerce-modules/msdyn365-exp-test-connector/dist/lib/connectors/msdyn365-exp-test/msdyn365-exp-test.listener');\n let connectorDomainsList = 'https://msdyn365-exp-test.com ';\n if (!connectorProviderImpl.default) {\n throw new Error('Exp Connector provider msdyn365-exp-test does not have a default export. Check the provider file of the connector for a default export.');\n }\n if (!connectorListenerImpl.default) {\n throw new Error('Exp Connector listener msdyn365-exp-test does not have a default export. Check the listener file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default, listener: connectorListenerImpl.default, connectorDomains: connectorDomainsList};\n }\n\nexport const validateConnectorRegistration = () => {\n \n verifySegmentationRegistration('100');\n\n verifyExperimentationReigstration('Optimizely');\n\n if (isServer()) {\n verifyGeoLookupRegistration('geoLookup-maxmind');}\n\n};","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IExpLogger } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * A basic implementation of the ExperimentationProvider interface used for testing\n */\nclass MsDyn365ExpTestConnectorListener implements IExpLogger {\n private userId: string = '';\n public initializeClientSide(config: any, userId: string): boolean {\n this.userId = userId;\n console.log(`Listener initialize called with config ${JSON.stringify(config)} and userId ${userId}`);\n return true;\n }\n public logEvent(eventName: string, payload: any, attributes?: any): void {\n console.log(`tracking events with event type - ${eventName}, payload - ${payload}, user id - ${this.userId}`);\n }\n}\n\nconst connectorListener = new MsDyn365ExpTestConnectorListener();\nexport default connectorListener;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, max-lines */\nimport { IExperimentationProvider, IExperimentsResult, ISecretManager, IVariants, State } from '@msdyn365-commerce/core';\n/**\n * A basic implementation of the ExperimentationProvider interface used for testing\n */\nclass MsDyn365ExpTestConnector implements IExperimentationProvider {\n private variantSet1: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid1'\n },\n {\n variantId: 'var1',\n experimentId: 'expid4'\n },\n {\n variantId: 'var1',\n experimentId: 'expid6'\n },\n {\n variantId: 'var1',\n experimentId: 'expid7'\n },\n {\n variantId: 'var1',\n experimentId: 'expid8'\n },\n {\n variantId: 'var1',\n experimentId: 'expid9'\n },\n {\n variantId: 'var1',\n experimentId: 'expid10'\n },\n {\n variantId: 'var1',\n experimentId: 'expid11'\n },\n {\n variantId: 'var1',\n experimentId: 'expid12'\n }\n ];\n\n private variantSet2: IVariants[] = [\n {\n variantId: 'var2',\n experimentId: 'expid1'\n },\n {\n variantId: 'var2',\n experimentId: 'expid5'\n },\n {\n variantId: 'var2',\n experimentId: 'expid7'\n },\n {\n variantId: 'var2',\n experimentId: 'expid8'\n },\n {\n variantId: 'var2',\n experimentId: 'expid9'\n },\n {\n variantId: 'var2',\n experimentId: 'expid10'\n },\n {\n variantId: 'var2',\n experimentId: 'expid11'\n },\n {\n variantId: 'var2',\n experimentId: 'expid12'\n }\n ];\n\n private variantSet3: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid5'\n },\n {\n variantId: 'var2',\n experimentId: 'expid13'\n },\n {\n variantId: 'var2',\n experimentId: 'expid14'\n },\n {\n variantId: 'var2',\n experimentId: 'expid15'\n },\n {\n variantId: 'var2',\n experimentId: 'expid16'\n },\n {\n variantId: 'var2',\n experimentId: 'expid17'\n },\n {\n variantId: 'var2',\n experimentId: 'expid18'\n },\n {\n variantId: 'var2',\n experimentId: 'expid19'\n },\n {\n variantId: 'var2',\n experimentId: 'expid20'\n },\n {\n variantId: 'var2',\n experimentId: 'expid21'\n },\n {\n variantId: 'var2',\n experimentId: 'expid22'\n },\n {\n variantId: 'var2',\n experimentId: 'expid23'\n },\n {\n variantId: 'var2',\n experimentId: 'expid24'\n },\n {\n variantId: 'var2',\n experimentId: 'expid25'\n }\n ];\n\n private variantSet4: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid5'\n },\n {\n variantId: 'var1',\n experimentId: 'expid1'\n },\n {\n variantId: 'var1',\n experimentId: 'expid13'\n },\n {\n variantId: 'var1',\n experimentId: 'expid14'\n },\n {\n variantId: 'var1',\n experimentId: 'expid15'\n },\n {\n variantId: 'var1',\n experimentId: 'expid16'\n },\n {\n variantId: 'var1',\n experimentId: 'expid17'\n },\n {\n variantId: 'var1',\n experimentId: 'expid18'\n },\n {\n variantId: 'var1',\n experimentId: 'expid19'\n },\n {\n variantId: 'var1',\n experimentId: 'expid20'\n },\n {\n variantId: 'var1',\n experimentId: 'expid21'\n },\n {\n variantId: 'var1',\n experimentId: 'expid22'\n },\n {\n variantId: 'var1',\n experimentId: 'expid23'\n },\n {\n variantId: 'var1',\n experimentId: 'expid24'\n },\n {\n variantId: 'var1',\n experimentId: 'expid25'\n }\n ];\n\n public getConfigForClientSideInit(): Promise {\n return Promise.resolve({});\n }\n public initializeClientSide(config: any): boolean {\n console.log(`Initialize client side called on MsDyn365ExpTestConnector with config ${config}`);\n return true;\n }\n\n public getExperiments(): Promise {\n return Promise.resolve({\n name: 'msdyn365-exp-test-2',\n experiments: [\n {\n id: 'expid1',\n friendlyName: 'experiment-1',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n link: 'www.msdyn365-exp-test-connector/expid1',\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var3',\n friendlyName: 'variant-3',\n status: State.Draft,\n weight: '0.2'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid2',\n friendlyName: 'experiment-2',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Paused,\n link: 'www.msdyn365-exp-test-connector/expid2',\n variations: [\n {\n id: 'var3',\n friendlyName: 'variant-3',\n status: State.Paused,\n weight: '1.0'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid3',\n friendlyName: 'experiment-3',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Archived,\n variations: [\n {\n id: 'var4',\n friendlyName: 'variant-4',\n status: State.Archived,\n weight: '1.0'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid4',\n friendlyName: 'experiment-4',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid5',\n friendlyName: 'experiment-5',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid6',\n friendlyName: 'experiment-6',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid7',\n friendlyName: 'experiment-7',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid8',\n friendlyName: 'experiment-8',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid9',\n friendlyName: 'experiment-9',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid10',\n friendlyName: 'experiment-10',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid11',\n friendlyName: 'experiment-11',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid12',\n friendlyName: 'experiment-12',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid13',\n friendlyName: 'experiment-13',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid14',\n friendlyName: 'experiment-14',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid15',\n friendlyName: 'experiment-15',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid16',\n friendlyName: 'experiment-16',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid17',\n friendlyName: 'experiment-17',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid18',\n friendlyName: 'experiment-18',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid19',\n friendlyName: 'experiment-19',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid20',\n friendlyName: 'experiment-20',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid21',\n friendlyName: 'experiment-21',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid22',\n friendlyName: 'experiment-22',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid23',\n friendlyName: 'experiment-23',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid24',\n friendlyName: 'experiment-24',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid25',\n friendlyName: 'experiment-25',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n }\n ]\n });\n }\n public getVariantsForUser(userId: string, attributes?: { [index: string]: string } | undefined): IVariants[] {\n if (userId.match(/^[0-3].*$/)) {\n return this.variantSet1;\n } else if (userId.match(/^[4-7].*$/)) {\n return this.variantSet2;\n } else if (userId.match(/^[8-9|a-b].*$/)) {\n return this.variantSet3;\n } else {\n return this.variantSet4;\n }\n }\n public activateExperiment(userId: string, experiments: IVariants[], attributes?: { [index: string]: string } | undefined): boolean {\n console.log(\n `Active experiment called on MsDyn365ExpTestConnector with userId: ${userId}, experiments: ${JSON.stringify(\n experiments\n )}, attributes: ${JSON.stringify(attributes)}`\n );\n return true;\n }\n public initialize(config: any, secretManager?: ISecretManager): Promise {\n console.log(`MsDyn365 Exp Test Connector called with config: ${JSON.stringify(config)}`);\n return Promise.resolve(true);\n }\n}\n\nconst connector = new MsDyn365ExpTestConnector();\nexport default connector;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["emailRegex","emailValue","test","removeSpecialChars","str","ctx","request","app","config","removeSpecialCharsPDP","replace","removeSpecialCharsFromURLPath","urlPath","decodeURIComponent","split","initialize","Promise","resolve","ip","secretAccountId","msdyn365Commerce","getSecretValue","apiSettings","baseUrl","secretLicenseKey","client","WebServiceClient","value","maxmindData","city","state","subdivisions","length","isoCode","metroCode","location","toString","geoLocation","country","names","en","region","zipCode","postal","code","Cookies","set","Date","now","path","maxAge","secure","constructor","testSegments","101","console","log","JSON","stringify","userId","segmentationIds","this","_getProductType","shippingInformation","toLowerCase","computeItemLines","product","defaultVariantId","lowestPriceVariantRecordId","IsMasterProduct","RecordId","context","attributeValues","extensionProperties","productDeliveryMessage","shippingInformationSmall","find","attr","Name","trim","smallParcelAttributeKey","TextValue","defaultVariantShippingInformation","property","Key","Value","StringValue","deliveryByMessage","deliveryDays","leadTime","brandList","brand","brandBackofficeAttributePlp","map","singleBrand","brandName","undefined","brandLeadtime","_makeDeliveryMessage","React","className","CustomSkeleton","type","splitPrice","price","dollars","cents","formattedPrice","toLocaleString","style","currency","priceArr","match","Price","standard","current","standardDollars","standardCents","currentDollars","currentCents","_parseValue","productRating","Math","round","renderLabel","name","rating","ratingAriaLabel","getRatingAriaLabel","roundedRating","toFixed","format","renderRating","typeName","id","avgRating","totalRatings","ariaLabel","numRatings","RatingComponent","ratingCount","readOnly","data","renderPrice","basePrice","adjustedPrice","savingsText","freePriceText","originalPriceText","currentPriceText","BasePrice","AdjustedPrice","CustomerContextualPrice","PriceComponent","renderProductPlacementImage","productCardimageSettings","gridSettings","imageUrl","fallbackImageUrl","altText","requestContext","fallBackImage","emptyPlaceHolderImage","fallbackImageSource","image","src","fallBackSrc","imageProps","imageSettings","cropFocalRegion","Image","Object","loadFailureBehavior","bypassHideOnFailure","renderProductBadge","attributeName","attributes","badgeData","currAttribute","finalizedBadges","badge","parseBadgeData","parsedBadge","buildProductBadge","ProductComponent","component","allowBack","telemetryContent","quickViewButton","eyebrowMessage","badgeAttribute","deliveryMessage","isRefinersEnabled","displayShopNow","shopNowBtnText","showBvRatings","enableAttributeBasedRating","getEyebrowElementRef","eyebrowElement","querySelector","isTruncated","setTruncated","height","scrollHeight","visibleHeight","clientHeight","badgeAttributeToUse","productBadgeAttribute","AttributeValues","ExtensionProperties","isBVratings","averageRating","getBVAttributeValues","AverageRating","TotalRatings","handleResize","MsDyn365","window","addEventListener","removeEventListener","EcomLowestPriceVariantRecIdKey","unbxdDefaultVariant","LongValue","queryBasedSelection","queryBasedVariantSelection","placeholderImageName","defaultOrLowestVariantRecordId","productUrl","getProductPageUrlSync","MasterProductId","actionContext","srcUrl","URL","queryString","search","href","pathname","updateProductUrl","variantIdQueryParams","includes","payLoad","getPayloadObject","attribute","getTelemetryAttributes","sizeValue","i","stringValue","stopConvert","txt","charAt","toUpperCase","substr","isCustomizedDesign","parseBrandName","productTitleWithBrandname","onClick","onTelemetryClick","cultureFormatter","formatCurrency","PrimaryImageUrl","title","slice","hideRating","Button","color","priceComponent","isSearchResultContainer","role","setProductUrl","ref","RichTextComponent","text","BVRatingSummary","itemId","ItemId","variantId","description","Description","DeliveryMessage","FinancingPerMonthComponent","pageType","sellingPrice","activeVariantId","productId","activeColorVariantId","RatingComponentActions","onSliderChanged","event","props","setRating","Number","parseInt","target","lastSelectedRating","onChange","onMouseLeave","_event","onMouseOver","getIndex","index","Rating","initialRating","useState","useEffect","newRating","starControl","renderStars","tabIndex","defaultProps","currentRating","min","max","step","mouseOver","floor","remainder","filled","half","stars","glyphClass","push","key","getAttribute","img","productName","ratings","standardPrice","currentPrice","eyebrowText","isActive","componentDictionary","c","require","cn","error","handleMissingImplementationDetails","functionName","connectorName","connectorType","Error","isServer","document","connectorDictionary","connectorProviderImpl","default","provider","connectorListenerImpl","connectorDomainsList","listener","connectorDomains","validateConnectorRegistration","segmentationProvider","__proto__","getSegmentations","e","verifySegmentationRegistration","connectorImpl","getConfigForClientSideInit","initializeClientSide","getExperiments","getVariantsForUser","activateExperiment","logEvent","verifyExperimentationReigstration","geoLookupProvider","getGeoInformation","verifyGeoLookupRegistration","eventName","payload","variantSet1","experimentId","variantSet2","variantSet3","variantSet4","experiments","friendlyName","status","State","link","variations","weight","createdDate","lastModifiedDate","lastModifiedBy","secretManager","module","exports","ReactDOM"],"sourceRoot":""}