{"version":3,"file":"static/js/e63315665fb15fc237f9.bundle.js","mappings":"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","sources":["webpack://sheikh-zayed-festival/./src/themes/sheikhzayedfestival/views/product-collection.view.tsx?4b30","webpack://sheikh-zayed-festival/./src/utilities/icons.tsx?b298","webpack://sheikh-zayed-festival/./lib/product-collection/module-registration.js?36d3","webpack://sheikh-zayed-festival/./src/modules/product-collection/product-collection.tsx?4008","webpack://sheikh-zayed-festival/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://sheikh-zayed-festival/external var \"React\"?0d3b","webpack://sheikh-zayed-festival/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 {\r\n INodeProps,\r\n Module,\r\n Node,\r\n Button\r\n // NodeTag\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n IProductCollectionViewProps,\r\n IProductComponentViewProps\r\n} from '@msdyn365-commerce-modules/product-collection/src/modules/product-collection/./product-collection';\r\nimport { IProductCollectionProps, IProductCollectionResources } from './../definition-extensions/product-collection.ext.props.autogenerated';\r\nimport { IProductCollectionData } from './product-collection.data';\r\nimport { Category, TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport Slider from 'react-slick';\r\nimport { IFestivalCategory, IFestivalActivitiesStaticSubNavItems } from '../../../utilities/interfaces';\r\nimport { msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { FestivalSVG } from '../../../utilities/icons';\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 resources,\r\n context: { request: { apiSettings: { baseImageUrl }, locale, sitePath, textDirection } },\r\n config: { linkText, categoryIdsToShow, autoPlay, autoplaySpeed, pauseOnMouseHover },\r\n app: { config: { festivalActivities, festivalActivitiesStaticSubNavItems } },\r\n data: { categories }\r\n } = props;\r\n\r\n const settings = {\r\n dots: true,\r\n infinite: true,\r\n speed: 500,\r\n slidesToShow: 4,\r\n slidesToScroll: 1,\r\n responsive: [\r\n {\r\n breakpoint: 1199,\r\n settings: {\r\n slidesToShow: 3,\r\n slidesToScroll: 1\r\n\r\n }\r\n },\r\n {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 2,\r\n slidesToScroll: 1\r\n }\r\n },\r\n {\r\n breakpoint: 480,\r\n settings: {\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n }\r\n }\r\n\r\n ],\r\n [textDirection]: true,\r\n autoplay: autoPlay,\r\n autoplaySpeed: autoplaySpeed ? autoplaySpeed : 0,\r\n pauseOnHover: pauseOnMouseHover\r\n };\r\n /*VSI | CUSTOMIZATION | START */\r\n let szfCategories = categories.result?.filteredCategories;\r\n let sortedCategories: Category[] = [];\r\n if (categoryIdsToShow && categoryIdsToShow?.length > 0) {\r\n categoryIdsToShow?.map((categoryId) => {\r\n const filteredCategory = szfCategories?.find((category) => categoryId === category.RecordId);\r\n sortedCategories?.push(filteredCategory!);\r\n });\r\n }\r\n sortedCategories = sortedCategories.filter((i)=>i)\r\n if (props.config.useAsCategoryCollection) {\r\n const imageBaseURL = baseImageUrl?.substring(0, baseImageUrl?.length - 1);\r\n return (\r\n <>\r\n {/* */}\r\n {/*
\r\n \r\n

{'Event & Shows'}

\r\n
*/}\r\n {/*
*/}\r\n \r\n {/* {heading} */}\r\n {/* {seeAllButton} */}\r\n \r\n {sortedCategories && sortedCategories.map(\r\n (categoryItem, index) => {\r\n return _rendercategory(categoryItem, index, imageBaseURL, linkText!, festivalActivities, locale, sitePath!, festivalActivitiesStaticSubNavItems);\r\n }\r\n )}\r\n \r\n {/* {_renderCategoryCarousel(SingleSlideCarouselComponentProps, categories)} */}\r\n \r\n \r\n );\r\n }\r\n /*VSI | CUSTOMIZATION | END */\r\n if (products) {\r\n return (\r\n \r\n {heading}\r\n {seeAllButton}\r\n\r\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\r\n \r\n );\r\n }\r\n // upgrade-v40\r\n // If no products are retrieved and the list type is promotional, still render the module to keep the entry of promotion page\r\n if (props.config.productCollection.listType === 'promotional') {\r\n return (\r\n \r\n {heading}\r\n {seeAllButton}\r\n {_renderNoProduct(resources)}\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\n// const wrapCategories = (categoryList:Category[])=>{\r\n// return categoryList.map((item,index)=>{\r\n// return (\r\n\r\n// )\r\n// })\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\n// upgrade-v40\r\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\r\n return (\r\n \r\n

{resources.noProductToRenderText}

\r\n
\r\n );\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\nconst _rendercategory = (\r\n category: Category,\r\n index: number,\r\n imageBaseURL: string,\r\n linkText: string,\r\n festivalActivities: IFestivalCategory[],\r\n locale: string,\r\n sitePath: string,\r\n festivalActivitiesStaticSubNavItems: IFestivalActivitiesStaticSubNavItems[]\r\n): JSX.Element => {\r\n // let imagesource = category && category.Images && category?.Images[0].Uri;\r\n // imagesource = imagesource?.replace('^', ' ');\r\n // imagesource = imagesource?.replace('/', ' ');\r\n // const spaceIndex = imagesource?.indexOf(' ');\r\n // imagesource = imagesource?.substring(0, spaceIndex) + '/' + imagesource?.substring(spaceIndex! + 1);\r\n // let imageUrl = generateImageUrl(imagesource, props.context.request.apiSettings);\r\n\r\n // imageUrl = imageUrl?.replace('%2F', '/');\r\n // let imageUrl = generateImageUrl(ImageName, props.navProps.context.request.apiSettings);\r\n const translatedText = category?.NameTranslations?.find((item: TextValueTranslation) => item.Language?.toLowerCase().includes(locale.toLowerCase()));\r\n const handleOpenPlpSubCategory = (categoryId: number, categoryName: string | undefined): string => {\r\n const isSubCategory = festivalActivities.find((item: IFestivalCategory) => item.categoryId === categoryId);\r\n const isStaticNavItem = festivalActivitiesStaticSubNavItems.find((item: IFestivalActivitiesStaticSubNavItems) => categoryName?.toLowerCase().includes(item.categoryName.toLowerCase()));\r\n return isStaticNavItem ? `${window.location.origin}${sitePath}/festival-activities/${isStaticNavItem.categoryName?.toLowerCase()?.replace(/ /g,'-').replace('&','and')}` : !isSubCategory ? `${window.location.href}/sub-festival-activities/${categoryName?.replace(/&/g, \"and\").replace(/\\s/g, \"-\").toLowerCase()}?categoryId=${categoryId}` : `${window.location.origin}${sitePath}/all/festival-activities/${categoryName?.replace(/&/g, \"and\").replace(/\\s/g, \"-\")?.toLowerCase()}/${categoryId}.c`;\r\n };\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n match.toUpperCase()).replace(',','')}__home__000.png`} />\r\n
\r\n \r\n
\r\n \r\n
\r\n

{translatedText?.Text!}

\r\n
\r\n
\r\n
\r\n
{category?.LocalizedDescription!}
\r\n
\r\n
\r\n
\r\n {\r\n msdyn365Commerce.isBrowser && window && (\r\n \r\n {linkText || `Read More`}\r\n \r\n )\r\n }\r\n
\r\n
\r\n );\r\n};\r\n// const _rendercategory = (category: Category, index: number): JSX.Element => {\r\n// const 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// return (\r\n// \r\n//
\r\n// \r\n//

{category.Name}

\r\n//
\r\n//
\r\n//
\r\n//
{category.LocalizedDescription}
\r\n//
\r\n//
\r\n\r\n//
\r\n//
\r\n// );\r\n// };\r\n// const _renderCategoryCarousel = (carouselContainer: INodeProps, items: Category[]): JSX.Element => {\r\n// return {items && items.map(_rendercategory)};\r\n// };\r\n\r\nexport default ProductCollectionView;\r\n","import React from 'react';\r\n\r\nexport const CalendarSVG = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const FestivalSVG = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const TimeSVG = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport const DateSVG = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\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['product-collection'] = {\n c: () => require('@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection'),\n $type: 'containerModule',\n da: [{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-collection',\n p: 'product-collection',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/product-collection/dist/lib/modules/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__|themes|sheikhzayedfestival|views|product-collection'] = {\n c: () => require('partner/themes/sheikhzayedfestival/views/product-collection.view.tsx'),\n cn: '__local__-__local__-product-collection'\n };\nviewDictionary['@msdyn365-commerce-modules|product-collection|modules|product-collection|product-collection'] = {\n c: () => require('@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection.view.js'),\n cn: '@msdyn365-commerce-modules-product-collection-product-collection'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(\n item,\n index,\n productPrices ? productPrices.find(p => p.ProductId === item.RecordId) : undefined\n );\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) &&\n shouldDisplaySeeAllButton &&\n (ArrayExtensions.hasElements(updatedProducts) || this.props.config.productCollection.listType === 'promotional')\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined,\n resources: resources\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.filter(p => !p.IsMasterProduct).map(p => p.RecordId)),\n this.props.context.actionContext\n );\n\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\nimport { IProductCollectionResources } from './product-collection.props.autogenerated';\n\nconst ProductCollectionView: React.FC = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton,\n resources\n } = props;\n\n if (products) {\n return (\n \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \n );\n }\n\n // If no products are retrieved and the list type is promotional, still render the module to keep the entry of promotion page\n if (props.config.productCollection.listType === 'promotional') {\n return (\n \n {heading}\n {seeAllButton}\n {_renderNoProduct(resources)}\n \n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderNoProduct = (resources: IProductCollectionResources): JSX.Element => {\n return (\n \n

{resources.noProductToRenderText}

\n
\n );\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\n};\n\nexport default ProductCollectionView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["_renderCarousel","carouselContainer","items","React","Node","Object","assign","map","_renderProduct","_renderGrid","gridContainer","_renderNoProduct","resources","className","noProductToRenderText","product","ProductContainer","productComponent","_rendercategory","category","index","imageBaseURL","linkText","festivalActivities","locale","sitePath","festivalActivitiesStaticSubNavItems","_category$NameTransla","_category$Name","translatedText","NameTranslations","find","item","_item$Language","Language","toLowerCase","includes","key","src","Name","replace","match","toUpperCase","FestivalSVG","Text","LocalizedDescription","msdyn365Commerce","isBrowser","window","Button","href","handleOpenPlpSubCategory","categoryId","categoryName","_isStaticNavItem$cate","_categoryName$replace","isSubCategory","isStaticNavItem","location","origin","RecordId","name","id","props","_categories$result","heading","ProductCollectionContainer","products","SingleSlideCarouselComponentProps","GridComponentProps","isCarousel","seeAllButton","context","request","apiSettings","baseImageUrl","textDirection","config","categoryIdsToShow","autoPlay","autoplaySpeed","pauseOnMouseHover","app","data","categories","settings","dots","infinite","speed","slidesToShow","slidesToScroll","responsive","breakpoint","autoplay","pauseOnHover","szfCategories","result","filteredCategories","sortedCategories","length","_sortedCategories","filteredCategory","push","filter","i","useAsCategoryCollection","substring","Module","Slider","categoryItem","productCollection","listType","telemetry","error","CalendarSVG","xmlns","width","height","viewBox","fill","d","fillRule","clipRule","TimeSVG","DateSVG","binding","modules","dataActions","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","__bindings__","_objectSpread","viewDictionary","cn","ProductCollection","constructor","super","handleHeadingChange","event","this","text","target","value","_getProductsDimensionsAvailabilities","async","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","ArrayExtensions","validValues","hasElements","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","actionContext","setState","initProductState","state","productPrices","productCollectionProducts","equals","undefined","Msdyn365","getProductPriceForSelectedProducts","ProductPriceForSelectedProductsInput","IsMasterProduct","_getProduct","productPrice","_this$props$data$feat","_this$state$productsD","trace","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","imageSettings","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","slots","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","Number","TotalRatings","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","featureState","priceResources","priceRangeSeparator","tag","role","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","typeName","quickViewButton","IsEnabled","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","MasterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","headingLabel","recommendation","discountIds","catalogId","getCatalogId","validateCatalogId","searchPageLink","getUrlSync","url","URL","searchParams","set","toString","title","seeAllButtonText","enableAffiliationBasedPricing","requestContext","user","isAuthenticated","render","shouldDisplaySeeAllButton","recommendationListId","layout","headingComponent","editProps","onEdit","updatedProducts","getProductData","ProductId","ObjectExtensions","isNullOrUndefined","productCollectionViewProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","moduleProps","classnames","renderView","module","exports","ReactDOM"],"sourceRoot":""}