{"version":3,"file":"static/js/b69ab0f57448994d83a6.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online.Memx/./src/actions/get-price-for-product-search-result.action.ts?edb0","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-product-collection/mmx-product-collection.props.autogenerated.ts?75eb","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-product-collection/mmx-product-collection.tsx?c37d","webpack://Msdyn365.Commerce.Online.Memx/./src/modules/mmx-product-collection/mmx-product-collection.view.tsx?8557","webpack://Msdyn365.Commerce.Online.Memx/./src/themes/memoryexpress/views/components/product.component.tsx?cd1d","webpack://Msdyn365.Commerce.Online.Memx/./lib/mmx-product-collection/module-registration.js?4000","webpack://Msdyn365.Commerce.Online.Memx/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online.Memx/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { CacheType, createObservableDataAction, getCatalogId, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductsDataActions, ProductSearchResult, ProjectionDomain } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ArrayExtensions, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Input class for the GetPriceForProductSearchResult Data Action.\r\n */\r\nexport class PriceForProductSearchResultInput implements IActionInput {\r\n public products: ProductSearchResult[];\r\n public customerId?: string;\r\n\r\n public constructor(products: ProductSearchResult[], customerId?: string) {\r\n this.products = products;\r\n this.customerId = customerId;\r\n }\r\n\r\n /**\r\n * Get the cache key.\r\n * @returns The cache key.\r\n */\r\n public getCacheKey = (): string => `PriceForProductSearchResult-${JSON.stringify(this.products)}`;\r\n\r\n /**\r\n * Get the cache object type.\r\n * @returns The cache object type.\r\n */\r\n public getCacheObjectType = (): string => 'ProductSearchResult';\r\n\r\n /**\r\n * Define the data cache type.\r\n * @returns The cache type.\r\n */\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * The createInput method for the GetPriceForProductSearchResultDataAction.\r\n * @param products -- The product search result.\r\n * @returns The input.\r\n */\r\nexport const createActivePriceForProductSearchResultInput = (products: ProductSearchResult[]): PriceForProductSearchResultInput => {\r\n return new PriceForProductSearchResultInput(products);\r\n};\r\n\r\n/**\r\n * The Action Method for the GetPriceForProductSearchResult Data Action\r\n * Gets the active price for product search result via the getActivePrice RetailServer API.\r\n * @param input -- The data input.\r\n * @param context -- The action context.\r\n * @returns The product search result updated with price.\r\n */\r\nexport async function getPriceForProductSearchResultAction(\r\n input: PriceForProductSearchResultInput,\r\n context: IActionContext\r\n): Promise {\r\n let productRecIds: number[];\r\n if (ArrayExtensions.hasElements(input.products)) {\r\n productRecIds = input.products.map(product => product.RecordId);\r\n } else {\r\n return Promise.resolve([]);\r\n }\r\n\r\n const catalogId = getCatalogId(context.requestContext);\r\n\r\n const projectDomain: ProjectionDomain = { ChannelId: +context.requestContext.apiSettings.channelId, CatalogId: catalogId };\r\n const priceZero = 0;\r\n\r\n try {\r\n const productPrices: ProductPrice[] = await ProductsDataActions.getActivePricesAsync(\r\n { callerContext: context, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context) },\r\n projectDomain,\r\n productRecIds,\r\n new Date(),\r\n input.customerId ?? null,\r\n undefined,\r\n true\r\n );\r\n\r\n const productResults: ProductSearchResult[] = input.products.map(product => {\r\n const activePrice = productPrices.find(price => price.ProductId === product.RecordId);\r\n //mmx-feature: discount fix --start\r\n product.ExtensionProperties?.push({ Key: 'BasePrice', Value: { IntegerValue: activePrice?.BasePrice } });\r\n product.ExtensionProperties?.push({ Key: 'AdjustedPrice', Value: { IntegerValue: activePrice?.AdjustedPrice } });\r\n product.ExtensionProperties?.push({\r\n Key: 'CustomerContextualPrice',\r\n Value: { IntegerValue: activePrice?.CustomerContextualPrice }\r\n });\r\n //mmx-feature: discount fix --end\r\n if (activePrice) {\r\n product.Price = activePrice.CustomerContextualPrice ?? product.Price;\r\n product.BasePrice = Math.max(\r\n activePrice.BasePrice ?? priceZero,\r\n activePrice.TradeAgreementPrice ?? priceZero,\r\n activePrice.AdjustedPrice ?? priceZero\r\n );\r\n }\r\n return product;\r\n });\r\n\r\n return Promise.resolve(productResults);\r\n } catch (error) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- existing error type.\r\n //@ts-ignore\r\n context.telemetry.exception(error);\r\n context.telemetry.debug('[getPriceForProductSearchResultAction]Error executing action');\r\n throw new Error('[getPriceForProductSearchResultAction]Error executing action');\r\n }\r\n}\r\n\r\n/**\r\n * The getPriceForProductSearchResult data action.\r\n */\r\nexport const getPriceForProductSearchResultDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-price-for-product-search-result',\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- existing pattern.\r\n action: >getPriceForProductSearchResultAction,\r\n input: createActivePriceForProductSearchResultInput\r\n});\r\n\r\nexport default getPriceForProductSearchResultDataAction;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IMmxProductCollection containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum layout {\r\n carousel = 'carousel',\r\n grid = 'grid'\r\n}\r\n\r\nexport interface IMmxProductCollectionConfig extends Msdyn365.IModuleConfig {\r\n productCollection: Msdyn365.IProductList;\r\n heading?: IHeadingData;\r\n layout?: layout;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n clientRender?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n shouldDisplaySeeAllButton?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport interface IMmxProductCollectionResources {\r\n priceFree: string;\r\n priceRangeSeparator: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ratingCountAriaLabel: string;\r\n ratingCountAriaLabelSingleUser: string;\r\n seeAllButtonText: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IMmxProductCollectionProps extends Msdyn365.IModule {\r\n resources: IMmxProductCollectionResources;\r\n config: IMmxProductCollectionConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\n//mmx-feature: --start\r\n/*\r\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\r\n*/\r\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\r\n//mmx-feature: --end\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n DimensionAvailabilitiesForProductSearchResultInput,\r\n DimensionTypes,\r\n DimensionSwatchDisplayTypes,\r\n getDimensionAvailabilitiesForProductSearchResultAction,\r\n getPriceForProductSearchResult,\r\n IDimensionsApp,\r\n ObjectExtensions,\r\n //mmx-feature: discount fix --start\r\n /*\r\n PriceForProductSearchResultInput,\r\n */\r\n //mmx-feature: discount fix -start\r\n validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getTelemetryObject,\r\n IComponentNodeProps,\r\n IModuleProps,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n ITelemetryContent,\r\n NodeTag,\r\n SingleSlideCarousel\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IMmxProductCollectionData } from './mmx-product-collection.data';\r\nimport { IMmxProductCollectionProps, layout } from './mmx-product-collection.props.autogenerated';\r\n//mmx-feature: discount error fix --start\r\nimport { ProductComponent } from '../../themes/memoryexpress/views/components/product.component';\r\nimport { PriceForProductSearchResultInput } from '../../actions/get-price-for-product-search-result.action';\r\n//mmx-feature: discount error fix --end\r\n\r\nexport interface IProductCollectionViewProps extends IMmxProductCollectionProps {\r\n heading?: React.ReactNode;\r\n ProductCollectionContainer: IModuleProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n GridComponentProps: INodeProps;\r\n products: IProductComponentViewProps[];\r\n isCarousel: boolean;\r\n productPrices?: ProductPrice[];\r\n seeAllButton?: React.ReactNode;\r\n}\r\n\r\nexport interface IProductComponentViewProps {\r\n ProductContainer: INodeProps;\r\n productComponent: React.ReactNode;\r\n}\r\nexport interface IProductComponentState {\r\n products: ProductSearchResult[];\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n}\r\n\r\n/**\r\n * ProductCollection component.\r\n */\r\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly productPrices: ProductPrice[];\r\n\r\n constructor(props: IMmxProductCollectionProps) {\r\n super(props);\r\n this.productPrices = [];\r\n this.state = {\r\n products: this.props.config.productCollection.products || []\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n //mmx-feature: discount error fix --start\r\n /*\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\r\n */\r\n await this._getActivePrice();\r\n /*\r\n }\r\n */\r\n //mmx-feature: discount error fix --end\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\r\n const { resources } = this.props;\r\n const recommendation = this.props.config.productCollection.recommendationListId;\r\n\r\n // Initialize state in case if the products were not found during initial module render\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\r\n this.initProductState(this.props.config.productCollection);\r\n\r\n const products = this.state.products;\r\n const isCarousel = this.props.config.layout === layout.carousel;\r\n const headingLabel = heading ? heading.text : '';\r\n const headingComponent = heading && (\r\n \r\n );\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\r\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\r\n const getProductData = this._getProduct(item, index);\r\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\r\n });\r\n\r\n const productCollectionViewProps = {\r\n ...this.props,\r\n heading: headingComponent,\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: '',\r\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\r\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\r\n parentId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n } as IComponentNodeProps,\r\n ProductCollectionContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-product-collection', className)\r\n },\r\n GridComponentProps: {\r\n tag: 'ul' as NodeTag,\r\n className: 'ms-product-collection__items'\r\n },\r\n isCarousel,\r\n\r\n products:\r\n ArrayExtensions.hasElements(updatedProducts) &&\r\n updatedProducts.filter(item => {\r\n return item !== undefined;\r\n }),\r\n productPrices: this.productPrices,\r\n seeAllButton:\r\n recommendation && shouldDisplaySeeAllButton && ArrayExtensions.hasElements(updatedProducts)\r\n ? this._getSeeAllButton(recommendation, headingLabel)\r\n : undefined\r\n };\r\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @param products - Products.\r\n * @returns Promise.\r\n */\r\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\r\n const context = this.props.context as ICoreContext;\r\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\r\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\r\n const validProducts = ArrayExtensions.validValues(products);\r\n if (\r\n ArrayExtensions.hasElements(validProducts) &&\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\r\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\r\n ) {\r\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\r\n new DimensionAvailabilitiesForProductSearchResultInput(\r\n validProducts,\r\n this.props.context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n ),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\r\n this.setState({ productsDimensionAvailabilities });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Helper method to initialize products state.\r\n * @param productCollection - List of products.\r\n */\r\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\r\n let products = this.state.products;\r\n const productCollectionProducts = productCollection.products;\r\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\r\n products = productCollectionProducts;\r\n this.setState({ products });\r\n } else if (\r\n ArrayExtensions.hasElements(products) &&\r\n ArrayExtensions.hasElements(productCollectionProducts) &&\r\n !ArrayExtensions.equals(products, productCollectionProducts)\r\n ) {\r\n products = productCollectionProducts;\r\n this.setState({ products });\r\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\r\n products = [];\r\n this.setState({ products: products });\r\n }\r\n\r\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\r\n await this._getProductsDimensionsAvailabilities(products);\r\n }\r\n };\r\n\r\n private readonly _getProduct = (product: ProductSearchResult, index: number): IProductComponentViewProps | null => {\r\n if (!product || !product.Name) {\r\n this.props.telemetry.trace('[product-collection] Product or product name is null');\r\n return null;\r\n }\r\n const telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n const { imageSettings, allowBackNavigation } = this.props.config;\r\n const resources = this.props.resources;\r\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\r\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\r\n const quickviewSlot =\r\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\r\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\r\n ? this.props.slots.productComparisonButton[0]\r\n : null;\r\n\r\n const reviewCount = 1;\r\n const reviewTotalRatings = Number(product.TotalRatings);\r\n const reviewCountAriaLabelValue =\r\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\r\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n const priceResources: IPriceComponentResources = {\r\n priceRangeSeparator: resources.priceRangeSeparator\r\n };\r\n return {\r\n ProductContainer: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-product-collection__item',\r\n role: 'listitem',\r\n key: index\r\n },\r\n productComponent: (\r\n \r\n ArrayExtensions.hasElements(dimensionAvailability) &&\r\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\r\n )}\r\n />\r\n )\r\n };\r\n };\r\n\r\n /**\r\n * Get the active price for products.\r\n */\r\n private readonly _getActivePrice = async (): Promise => {\r\n const productsList = this.state.products;\r\n //mmx-feature: discount error fix --start\r\n let customerId : string | undefined;\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\r\n customerId = this.props.context.request.user.customerAccountNumber;\r\n }\r\n //mmx-feature: discount error fix --end\r\n const products = await getPriceForProductSearchResult(\r\n //mmx-feature: discount error fix --start\r\n /*\r\n new PriceForProductSearchResultInput(productsList),\r\n */\r\n new PriceForProductSearchResultInput(productsList, customerId),\r\n //mmx-feature: discount error fix --end\r\n this.props.context.actionContext\r\n );\r\n if (Msdyn365.msdyn365Commerce.isBrowser) {\r\n await this._getProductsDimensionsAvailabilities(products);\r\n }\r\n\r\n this.setState({ products });\r\n };\r\n\r\n /**\r\n * Get the see all button.\r\n * @param recommendation - Recommendation.\r\n * @param headingLabel - Heading label.\r\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\r\n */\r\n private readonly _getSeeAllButton = (recommendation: string, headingLabel: string): React.ReactNode => {\r\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\r\n return null;\r\n }\r\n\r\n const catalogId = getCatalogId(this.props.context.request);\r\n validateCatalogId(catalogId);\r\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\r\n if (!searchPageLink) {\r\n return null;\r\n }\r\n\r\n const url = new URL(searchPageLink, window.location.href);\r\n url.searchParams.set('recommendation', recommendation);\r\n url.searchParams.set('title', headingLabel);\r\n url.searchParams.set('catalogid', `${catalogId}`);\r\n\r\n return (\r\n \r\n {this.props.resources.seeAllButtonText}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default ProductCollection;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './mmx-product-collection';\r\n\r\nconst ProductCollectionView: React.FC = props => {\r\n const {\r\n heading,\r\n ProductCollectionContainer,\r\n products,\r\n SingleSlideCarouselComponentProps,\r\n GridComponentProps,\r\n isCarousel,\r\n seeAllButton\r\n } = props;\r\n\r\n if (products) {\r\n return (\r\n \r\n {heading}\r\n {seeAllButton}\r\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\r\n \r\n );\r\n }\r\n props.context.telemetry.error('Product collection content is empty, module wont render.');\r\n return null;\r\n};\r\n\r\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\r\n return {items && items.map(_renderProduct)};\r\n};\r\n\r\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\r\n return {items && items.map(_renderProduct)};\r\n};\r\n\r\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\r\n const { ProductContainer, productComponent } = product;\r\n\r\n return {productComponent};\r\n};\r\n\r\nexport default ProductCollectionView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n IPriceComponentResources,\r\n ISwatchItem,\r\n PriceComponent,\r\n ProductComponentSwatchComponent,\r\n RatingComponent\r\n} from '@msdyn365-commerce/components';\r\nimport {\r\n getCatalogId,\r\n IAny,\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGeneric,\r\n IGridSettings,\r\n IImageData,\r\n IImageSettings,\r\n Image,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeSwatch, AttributeValue, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n convertDimensionTypeToProductDimensionType,\r\n Dictionary,\r\n DimensionTypes,\r\n generateImageUrl,\r\n getProductPageUrlSync,\r\n IDimensionsApp,\r\n StringExtensions,\r\n validateCatalogId\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 } from 'react';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n isEnabledProductDescription?: boolean;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n inventoryLabel?: string;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\n/**\r\n * Gets the product page url from the default swatch selected.\r\n * @param productData - Product card to be rendered.\r\n * @returns The default color swatch selected if any.\r\n */\r\nfunction getDefaultSwatchSelected(coreContext: ICoreContext, productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n const attributeSwatches = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\r\n )?.Swatches;\r\n\r\n if (!ArrayExtensions.hasElements(attributeSwatches)) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\r\n return defaultSwatch;\r\n}\r\n\r\n/**\r\n * Gets the product image from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\nfunction getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\r\n const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\r\n if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n\r\n return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\r\n}\r\n\r\n/**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\nfunction updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n if (sourceUrl.search) {\r\n sourceUrl.search += `&${queryString}`;\r\n } else {\r\n sourceUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(sourceUrl.href);\r\n return updatedUrl.pathname + sourceUrl.search;\r\n}\r\n\r\n/**\r\n * Gets the react node for product unit of measure display.\r\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n if (!unitOfMeasure) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {unitOfMeasure}\r\n
\r\n );\r\n}\r\n\r\n/**\r\n * Gets the react node for product availability.\r\n * @param inventoryAvailabilityLabel - The product information.\r\n * @returns The node representing markup for product availability.\r\n */\r\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {inventoryAvailabilityLabel}\r\n
\r\n );\r\n}\r\n\r\n/**\r\n * Renders product comparison button similar to the quick view button.\r\n * @param productComparisonButton - React element of the button.\r\n * @param product - Current product info.\r\n * @param catalogId - Current catalog.\r\n * @returns React element for the specific product.\r\n */\r\nfunction renderProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: ProductSearchResult,\r\n catalogId: number\r\n): JSX.Element | undefined {\r\n validateCatalogId(catalogId);\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n}\r\n\r\n/**\r\n * Gets the product page url from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productUrl - Product page url for the product card.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\nfunction getProductPageUrlFromDefaultSwatch(\r\n coreContext: ICoreContext,\r\n productUrl: string,\r\n productData?: ProductSearchResult\r\n): string | undefined {\r\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\r\n if (!defaultSwatch?.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\r\n const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n}\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n productComparisonButton,\r\n isEnabledProductDescription,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n inventoryLabel,\r\n dimensionAvailabilities,\r\n swatchItemAriaLabel\r\n}) => {\r\n const product = data.product;\r\n\r\n let productUrl = getProductPageUrlSync(product?.Name ?? '', product?.RecordId ?? Number.MIN_VALUE, context.actionContext, undefined);\r\n if (allowBack) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\r\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n React.useEffect(() => {\r\n setProductPageUrl(productPageUrlFromSwatch);\r\n setProductImageUrl(productImageUrlFromSwatch);\r\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n /**\r\n * Updates the product page and Image url based on swatch selected.\r\n * @param coreContext - Context of the caller.\r\n * @param swatchItem - Dimension swatch selected.\r\n */\r\n const updatePageAndImageUrl = React.useCallback(\r\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n const dimensionType = swatchItem.dimensionType;\r\n selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n return;\r\n }\r\n const queryString = `${dimensionType}=${swatchItem.value}`;\r\n let productPageUrlWithSwatch = '';\r\n if (productPageUrl.includes(dimensionType)) {\r\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n newUrl.searchParams.delete(dimensionType);\r\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n } else {\r\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n }\r\n setProductPageUrl(productPageUrlWithSwatch);\r\n if (dimensionType === dimensionToPreSelectInProductCard) {\r\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n ? swatchItem.productImageUrls[0]\r\n : undefined;\r\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n setProductImageUrl(newImageUrl);\r\n }\r\n },\r\n [selectedSwatchItems, context, productPageUrl]\r\n );\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Checks if rendering the particular dimensions is allowed for product card.\r\n * @param dimensionType - Dimension to be displayed.\r\n * @returns Updates the state with new product page url.\r\n */\r\n function shouldDisplayDimension(dimensionType: string): boolean {\r\n const dimensionsContext = context as ICoreContext;\r\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\r\n return (\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @param attributeValues - Attribute value property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(attributeValues?: AttributeValue[]): JSX.Element | null {\r\n if (!attributeValues) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {attributeValues.map((item: AttributeValue) => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n if (!shouldDisplayDimension(dimensionTypeValue)) {\r\n return null;\r\n }\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n const swatches =\r\n item.Swatches?.map(swatchItem => {\r\n return {\r\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n value: swatchItem.SwatchValue ?? '',\r\n dimensionType,\r\n colorHexCode: swatchItem.SwatchColorHexCode,\r\n imageUrl: swatchItem.SwatchImageUrl,\r\n productImageUrls: swatchItem.ProductImageUrls,\r\n isDefault: swatchItem.IsDefault,\r\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\r\n isDisabled:\r\n enableStockCheck &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n )?.isDisabled\r\n };\r\n }) ?? [];\r\n if (\r\n dimensionType === dimensionToPreSelectInProductCard &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault)\r\n ) {\r\n swatches[0].isDefault = true;\r\n }\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n if (quickview === null) {\r\n return undefined;\r\n }\r\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n return {\r\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n DimensionValue: {\r\n RecordId: 0,\r\n Value: swatches.value\r\n }\r\n };\r\n });\r\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n }\r\n\r\n // 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 //mmx-feature: discount-fix --start\r\n const productPrice = {\r\n BasePrice: product.ExtensionProperties?.find(property => property.Key === 'BasePrice')?.Value\r\n ?.IntegerValue\r\n ?? product.BasePrice,\r\n AdjustedPrice: product.ExtensionProperties?.find(property => property.Key === 'AdjustedPrice')?.Value\r\n ?.IntegerValue\r\n ?? product.Price,\r\n CustomerContextualPrice: product.ExtensionProperties?.find(property => property.Key === 'CustomerContextualPrice')?.Value\r\n ?.IntegerValue\r\n ?? undefined,\r\n MaxVariantPrice: product.MaxVariantPrice,\r\n MinVariantPrice: product.MinVariantPrice,\r\n };\r\n //mmx-feature: discount-fix --end\r\n\r\n return (\r\n <>\r\n {isEnabledProductDescription ? (\r\n \r\n
\r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context\r\n )}\r\n
\r\n
\r\n
{product.Name}
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n //mmx-feature: discount-fix --start\r\n /*\r\n product.BasePrice,\r\n product.Price,\r\n */\r\n productPrice.BasePrice,\r\n productPrice.AdjustedPrice,\r\n //mmx-feature: discount-fix --end\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n isPriceMinMaxEnabled,\r\n priceResources\r\n //mmx-feature: discount-fix --start\r\n , productPrice.CustomerContextualPrice\r\n , productPrice.MaxVariantPrice\r\n , productPrice.MinVariantPrice\r\n //mmx-feature: discount-fix --end\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n
\r\n
\r\n \r\n ) : (\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context\r\n )}\r\n
\r\n
\r\n
{product.Name}
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n //mmx-feature: discount-fix --start\r\n /*\r\n product.BasePrice,\r\n product.Price,\r\n */\r\n productPrice.BasePrice,\r\n productPrice.AdjustedPrice,\r\n //mmx-feature: discount-fix --end\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n //mmx-feature: discount-fix --start\r\n , undefined\r\n , undefined\r\n , productPrice.CustomerContextualPrice\r\n , productPrice.MaxVariantPrice\r\n , productPrice.MinVariantPrice\r\n //mmx-feature: discount-fix --end\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n
\r\n \r\n )}\r\n {renderProductDimensions(product.AttributeValues)}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\r\n {renderProductAvailability(inventoryLabel)}\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\r\n \r\n );\r\n};\r\n\r\nfunction renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string\r\n): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n }`;\r\n}\r\n\r\nfunction renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n}\r\n\r\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\r\n if (rating && ratingAriaLabel) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n return '';\r\n}\r\n\r\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n}\r\n\r\nfunction renderRating(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string,\r\n ratingCountAriaLabel?: string\r\n): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numberRatings = totalRatings?.toString() || undefined;\r\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderPrice(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n savingsText?: string,\r\n freePriceText?: string,\r\n originalPriceText?: string,\r\n currentPriceText?: string,\r\n isPriceMinMaxEnabled?: boolean,\r\n priceResources?: IPriceComponentResources\r\n //mmx-feature: discount fix --start\r\n , customerContextualPrice?: number\r\n , maxVariantPrice?: number\r\n , minVariantPrice?: number\r\n //mmx-feature: discount fix --end\r\n): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n //mmx-feature: discount fix --start\r\n /*\r\n CustomerContextualPrice: adjustedPrice\r\n */\r\n CustomerContextualPrice: customerContextualPrice ?? adjustedPrice,\r\n MaxVariantPrice: maxVariantPrice ? maxVariantPrice : adjustedPrice,\r\n MinVariantPrice: minVariantPrice ? minVariantPrice : adjustedPrice\r\n //mmx-feature: discount fix --end\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderProductPlacementImage(\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n context?: ICoreContext>\r\n): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\r\n const contextConfig = context?.app.config?.placeholderImageName;\r\n const emptyPlaceHolderImage = contextConfig as string;\r\n let fallbackImageSource = fallbackImageUrl;\r\n if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps = {\r\n gridSettings,\r\n imageSettings\r\n };\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['mmx-product-collection'] = {\n c: () => require('partner/modules/mmx-product-collection/mmx-product-collection.tsx'),\n $type: 'containerModule',\n da: [{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mmx-product-collection',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mmx-product-collection'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|mmx-product-collection|mmx-product-collection'] = {\n c: () => require('partner/modules/mmx-product-collection/mmx-product-collection.view.tsx'),\n cn: '__local__-__local__-mmx-product-collection'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["PriceForProductSearchResultInput","constructor","products","customerId","getCacheKey","JSON","stringify","this","getCacheObjectType","dataCacheType","createActivePriceForProductSearchResultInput","async","getPriceForProductSearchResultAction","input","context","productRecIds","ArrayExtensions","hasElements","Promise","resolve","map","product","RecordId","catalogId","getCatalogId","requestContext","projectDomain","ChannelId","apiSettings","channelId","CatalogId","_input$customerId","productPrices","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","Date","undefined","productResults","_product$ExtensionPro","_product$ExtensionPro2","_product$ExtensionPro3","activePrice","find","price","ProductId","_activePrice$Customer","_activePrice$BasePric","_activePrice$TradeAgr","_activePrice$Adjusted","ExtensionProperties","push","Key","Value","IntegerValue","BasePrice","AdjustedPrice","CustomerContextualPrice","Price","Math","max","TradeAgreementPrice","error","telemetry","exception","debug","Error","getPriceForProductSearchResultDataAction","createObservableDataAction","id","action","layout","HeadingTag","ProductCollection","React","props","super","handleHeadingChange","event","config","heading","text","target","value","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","app","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","includes","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","actionContext","setState","initProductState","state","productCollectionProducts","productCollection","equals","Msdyn365","isBrowser","_getProduct","index","_this$props$data$feat","_this$state$productsD","Name","trace","telemetryContent","getTelemetryObject","request","telemetryPageName","friendlyName","imageSettings","allowBackNavigation","resources","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","slots","quickview","length","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","Number","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","data","featureState","result","priceResources","priceRangeSeparator","ProductContainer","tag","className","role","key","productComponent","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","typeName","quickViewButton","IsEnabled","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","MasterProductId","_getActivePrice","productsList","enableAffiliationBasedPricing","user","isAuthenticated","customerAccountNumber","getPriceForProductSearchResult","_getSeeAllButton","recommendation","headingLabel","validateCatalogId","searchPageLink","getUrlSync","url","URL","window","location","href","searchParams","set","Button","title","seeAllButtonText","render","shouldDisplaySeeAllButton","recommendationListId","isCarousel","carousel","headingComponent","editProps","onEdit","updatedProducts","item","getProductData","ObjectExtensions","isNullOrUndefined","productCollectionViewProps","_objectSpread","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","ProductCollectionContainer","moduleProps","classnames","GridComponentProps","filter","seeAllButton","renderView","_renderCarousel","carouselContainer","items","Node","Object","assign","_renderProduct","_renderGrid","gridContainer","Module","getDefaultSwatchSelected","coreContext","productData","_productData$Attribut","_attributeSwatches$fi","AttributeValues","dimensionToPreSelectInProductCard","attributeSwatches","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","Swatches","IsDefault","updateProductUrl","productDetailsPageUrl","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","name","rating","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","roundedRating","toFixed","format","renderPrice","basePrice","adjustedPrice","savingsText","customerContextualPrice","maxVariantPrice","minVariantPrice","MaxVariantPrice","MinVariantPrice","PriceComponent","renderProductPlacementImage","gridSettings","imageUrl","fallbackImageUrl","altText","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","img","src","fallBackSrc","imageProps","cropFocalRegion","Image","loadFailureBehavior","bypassHideOnFailure","msdyn365Commerce","createComponentOverride","component","_ref","_product$Name","_product$RecordId","_getProductImageUrlFr","_getProductPageUrlFro","_product$ExtensionPro4","_product$ExtensionPro5","_product$ExtensionPro6","isEnabledProductDescription","inventoryLabel","swatchItemAriaLabel","productUrl","getProductPageUrlSync","MIN_VALUE","productImageUrlFromSwatch","defaultSwatch","swatchProductImageUrls","ProductImageUrls","generateImageUrl","PrimaryImageUrl","getProductImageUrlFromDefaultSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","productPageUrlWithSwatch","newUrl","delete","toString","swatchProductImageUrl","productImageUrls","newImageUrl","payLoad","getPayloadObject","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","productPrice","property","onClick","onTelemetryClick","cultureFormatter","formatCurrency","AverageRating","DefaultUnitOfMeasure","description","Description","attributeValues","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","shouldDisplayDimension","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","itemId","colorHexCode","SwatchColorHexCode","SwatchImageUrl","isDefault","isDisabled","_swatchItem$SwatchVal3","some","swatch","ProductComponentSwatchComponent","onSelectDimension","hideRating","moduleTypeName","moduleId","avgRating","totalRatings","ariaLabel","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","selectedProductId","renderQuickView","renderProductComparisonButton","binding","modules","dataActions","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}