{"version":3,"file":"static/js/07dce54c2aad9318b643.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/get-delivery-by-message.tsx?05db","webpack://mattressfirm/./src/Utilities/get-product-badge.tsx?635b","webpack://mattressfirm/./src/Utilities/get-view-port.tsx?4210","webpack://mattressfirm/./src/Utilities/get-zipcode.ts?4f03","webpack://mattressfirm/./src/Utilities/product-search-result-utils.tsx?58f2","webpack://mattressfirm/./src/actions/get-mfrm-products-category-paths.action.ts?dc81","webpack://mattressfirm/./src/actions/TryInStoreDataServiceEntities.g.ts?ea57","webpack://mattressfirm/./src/actions/TryInStoreDataActionExtension.g.ts?c8db","webpack://mattressfirm/./src/actions/get-try-in-store-info.action.ts?dff9","webpack://mattressfirm/./src/data-actions/store-selector-state-data-action.ts?6df6","webpack://mattressfirm/./src/actions/ProductRecommendationDataServiceEntities.g.ts?8590","webpack://mattressfirm/./src/actions/ProductRecommendationDataActionExtension.g.ts?8c1d","webpack://mattressfirm/./src/modules/mfrm-product-recommendations/featured-content.tsx?59e9","webpack://mattressfirm/./src/modules/mfrm-product-recommendations/mfrm-product-recommendations.tsx?d3c1","webpack://mattressfirm/./src/modules/mfrm-product-recommendations/mfrm-product-recommendations.view.tsx?ecbf","webpack://mattressfirm/./src/themes/mattressfirm/views/components/rating.component.tsx?6883","webpack://mattressfirm/./lib/mfrm-product-recommendations/module-registration.js?e542","webpack://mattressfirm/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://mattressfirm/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://mattressfirm/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { IMFICLDeliveryScheduleParameters } from '../actions/CoreProductDataServiceEntities.g';\r\nimport getDeliveryMessageAction, { GetDeliveryMessageInput } from '../actions/get-delivery-message.action';\r\n\r\nconst _getDeliveryByMessage = async (request: IMFICLDeliveryScheduleParameters, context: ICoreContext>, isCached?: boolean) => {\r\n if (request) {\r\n const getDeliveryMessageActionInput = new GetDeliveryMessageInput(request, isCached);\r\n try {\r\n let result;\r\n // eslint-disable-next-line prefer-const\r\n result = await getDeliveryMessageAction(getDeliveryMessageActionInput, context.actionContext);\r\n if (result) {\r\n return result;\r\n }\r\n } catch (error) {\r\n console.log('Error', error);\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport default _getDeliveryByMessage;\r\n","import { IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport tz from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\ndayjs.extend(tz);\r\ndayjs.extend(utc);\r\ndayjs.extend(isBetween);\r\nimport React from 'react';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nconst format = 'M/D/YYYY H:m:s';\r\n\r\nexport interface IBadgeData {\r\n src: string;\r\n alt: string;\r\n start: dayjs.Dayjs;\r\n end: dayjs.Dayjs;\r\n}\r\n\r\nconst defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `m=6`, w: 0, h: 0 }\r\n },\r\n disableLazyLoad: true\r\n};\r\n\r\nexport const parseBadgeData = (badgeData: string, requestContext: IRequestContext): IBadgeData | undefined => {\r\n let dataSegments;\r\n let scheduleStart;\r\n let scheduleEnd;\r\n let badgeType;\r\n let parsedScheduleStart;\r\n let startDate;\r\n let startTime;\r\n let parsedScheduleEnd;\r\n let endDate;\r\n let endTime;\r\n\r\n try {\r\n // split the data into its segments\r\n dataSegments = badgeData.split('#');\r\n scheduleStart = dataSegments[0];\r\n scheduleEnd = dataSegments[1];\r\n badgeType = dataSegments[2];\r\n\r\n // parse schedule start\r\n parsedScheduleStart = scheduleStart.split('_');\r\n startDate = parsedScheduleStart[0];\r\n startTime = parsedScheduleStart[1];\r\n\r\n // parse schedule end\r\n parsedScheduleEnd = scheduleEnd.split('_');\r\n endDate = parsedScheduleEnd[0];\r\n endTime = parsedScheduleEnd[1];\r\n } catch (e) {\r\n return;\r\n }\r\n\r\n const startMoment = `${startDate} ${startTime.replace(/-/g, \":\")}`;\r\n const endMoment = `${endDate} ${endTime.replace(/-/g, \":\")}`;\r\n\r\n const startMomentFormatted = dayjs(startMoment.replace(/-/g, \"/\"));\r\n const endMomentFormatted = dayjs(endMoment.replace(/-/g, \"/\"));\r\n\r\n // check if schedule is valid\r\n if (!(startMomentFormatted.isValid() && endMomentFormatted.isValid())) {\r\n return;\r\n }\r\n\r\n // parse badge type and create image src\r\n const baseUrl = requestContext.apiSettings.baseImageUrl.substring(0, requestContext.apiSettings.baseImageUrl.length - 1);\r\n if (badgeType) {\r\n const removed$ = badgeType.substring(1, badgeType.length - 1);\r\n const parsedBadgeType = removed$.replace(' ', '-').toLowerCase();\r\n\r\n // remove page name portion\r\n const altText = removed$.split('-')[0];\r\n\r\n const src = `${baseUrl}${parsedBadgeType}.png`;\r\n return {\r\n src: src,\r\n alt: altText,\r\n start: convertTimeZone(startMomentFormatted),\r\n end: convertTimeZone(endMomentFormatted)\r\n };\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\n// convert given time to Central Time (CT)\r\nconst convertTimeZone = (time: dayjs.Dayjs): dayjs.Dayjs => {\r\n return dayjs(time.format(format), format).tz('America/Chicago').local();\r\n};\r\n\r\nexport const buildProductBadge = (parsedBadgeData: IBadgeData, requestContext: IRequestContext): JSX.Element | undefined => {\r\n // only build image if it is scheduled\r\n const isScheduled = dayjs().isBetween(parsedBadgeData.start, parsedBadgeData.end);\r\n\r\n if (isScheduled) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const renderProductBadge = (\r\n attributeName: string | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined => {\r\n const badgeData = attributeName;\r\n if (!badgeData) {\r\n return;\r\n }\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n\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\nexport const renderProductBadgeByFilteringAttributes = (\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","import MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst _getViewPort = (context: ICoreContext): GridSize => {\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n return 'xs';\r\n};\r\n\r\nexport default _getViewPort;\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport Cookies from 'universal-cookie';\r\nexport const getZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const geolocationZipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n const cookie = new Cookies();\r\n const zipcode = cookie.get('zip_code') ? cookie.get('zip_code') : geolocationZipCode;\r\n return zipcode ?? undefined;\r\n};\r\nexport const getGeoLocationZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const zipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n return zipCode ?? null;\r\n};\r\n","import { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport Cookies from 'universal-cookie';\r\nimport { IMFIATPInventoryEntity, IMFICartLine, IMFICLDeliveryScheduleParameters } from '../actions/CoreProductDataServiceEntities.g';\r\nimport { IMFIAvailablePromotionDescription, IMFIItem } from '../actions/EyebrowMessageDataServiceEntities.g';\r\nimport getEyebrowAction, { GetEyebrowMessageInput } from '../actions/get-eyebrow-message.action';\r\nimport _getDeliveryByMessage from './get-delivery-by-message';\r\n\r\nexport const _getEyebrowMessage = async (products: IMFIItem[], context: ICoreContext>) => {\r\n const priceGroupForAPICall = context.app && context.app.config.priceGroup;\r\n if (products && products.length > 0 && (priceGroupForAPICall !== '' || priceGroupForAPICall !== undefined)) {\r\n const items: IMFIItem[] | undefined = [];\r\n products.map(item => {\r\n const singleItem: IMFIItem = {\r\n ItemId: item.ItemId,\r\n DistinctProductVariant: item.DistinctProductVariant\r\n };\r\n items.push(singleItem);\r\n });\r\n\r\n const requestBody: IMFIAvailablePromotionDescription = {\r\n PriceGroup: priceGroupForAPICall,\r\n Items: items\r\n };\r\n const getEyebrowMessageInput = new GetEyebrowMessageInput(requestBody, undefined, true);\r\n try {\r\n const result = await getEyebrowAction(getEyebrowMessageInput, context.actionContext);\r\n if (result) {\r\n return result;\r\n }\r\n } catch (error) {\r\n console.log('Error', error);\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const _makeDeliveryMessage = (days: string) => {\r\n if (days === '' || days === undefined || days === null) {\r\n return '';\r\n }\r\n\r\n let deliveryByMessage = '';\r\n let date = new Date();\r\n const daysSpan = days.split('-');\r\n let deliveryDate = Date.now();\r\n if (daysSpan && daysSpan[1] !== undefined && daysSpan.length) {\r\n let deliveryByMessageRange = '';\r\n daysSpan.map((item: string) => {\r\n date = new Date();\r\n deliveryDate = Date.now();\r\n if (parseInt(item, 10) > 0) {\r\n let numberOfDays = parseInt(item, 10);\r\n let newDate = deliveryDate;\r\n while (numberOfDays > 0) {\r\n newDate = date.setDate(date.getDate() + 1);\r\n if (dayjs(newDate).format('d') !== '0' && dayjs(newDate).format('d') !== '6') {\r\n numberOfDays--;\r\n }\r\n }\r\n deliveryByMessage = dayjs(newDate).format('MMM D');\r\n if (deliveryByMessageRange !== '') {\r\n deliveryByMessageRange = `${deliveryByMessageRange} to ${deliveryByMessage}`;\r\n } else {\r\n deliveryByMessageRange = deliveryByMessage;\r\n newDate = date.setDate(date.getDate() - parseInt(item[0], 10));\r\n }\r\n }\r\n });\r\n return `Delivery by ${deliveryByMessageRange}`;\r\n } else {\r\n deliveryByMessage = dayjs(deliveryDate).format('MMM D');\r\n let numberOfDays = parseInt(days, 10);\r\n let newDate = deliveryDate;\r\n let flag = true;\r\n while (numberOfDays > 0) {\r\n newDate = date.setDate(date.getDate() + 1);\r\n if (dayjs(newDate).format('d') !== '0' && dayjs(newDate).format('d') !== '6') {\r\n numberOfDays--;\r\n } else {\r\n flag = false;\r\n }\r\n }\r\n deliveryByMessage =\r\n flag && days === '1'\r\n ? `Tomorrow ${dayjs(Date.now()).format('MMM D')}`\r\n : dayjs(newDate).format('ddd MMM, D');\r\n return `Delivery by ${deliveryByMessage}`;\r\n }\r\n};\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const _coreProductATPCall = async (\r\n itemLines: IMFICartLine[],\r\n setCoreProductATPData: React.Dispatch,\r\n context: ICoreContext>\r\n) => {\r\n const cookies = new Cookies();\r\n const zipcode = cookies.get('zip_code');\r\n if (itemLines && itemLines.length === 0) {\r\n setCoreProductATPData([]);\r\n }\r\n const currentDate = Date.now();\r\n const requestBody: IMFICLDeliveryScheduleParameters = {\r\n InventoryType: 'Delivery',\r\n Weeks: context.app.config.weeksPDPforATPCall,\r\n StoreId: '',\r\n Page: 'plp',\r\n RequestedDate: dayjs(currentDate).format('MM/DD/YYYY'),\r\n ZipCode: zipcode,\r\n ItemLines: itemLines\r\n };\r\n const getDeliveryByMessage = _getDeliveryByMessage(requestBody, context);\r\n getDeliveryByMessage\r\n .then(result => {\r\n if (result !== undefined && result?.ATPInventoryData && result?.ATPInventoryData.length > 0) {\r\n setCoreProductATPData(result?.ATPInventoryData);\r\n } else {\r\n setCoreProductATPData([]);\r\n }\r\n })\r\n .catch(e => {\r\n console.log('Error', e);\r\n });\r\n};\r\n\r\nconst _setTime = (time: string | undefined) => {\r\n if (time !== undefined && time !== '') {\r\n const temp = time.split(' ');\r\n if (temp && temp.length > 0) {\r\n let newDatewithTime = dayjs(Date.now()).format('M/D/YYYY');\r\n newDatewithTime = `${newDatewithTime} ${temp[0]}:00 ${temp[1].toUpperCase()}`;\r\n return newDatewithTime;\r\n }\r\n }\r\n return '';\r\n};\r\n\r\nexport interface IATPInventoryData {\r\n deliveryByMessage: string;\r\n locationId: string;\r\n}\r\n\r\nexport const _getSoonestDeliveryDate = (coreProductATPData: IMFIATPInventoryEntity[]): IATPInventoryData => {\r\n let deliveryDetails = {\r\n deliveryByMessage: '',\r\n locationId: ''\r\n };\r\n if (!coreProductATPData || !coreProductATPData.length) {\r\n return deliveryDetails;\r\n }\r\n for (let index = 0; index < coreProductATPData.length; index++) {\r\n const item = coreProductATPData[index];\r\n if (item.Available === 'YES' && item.ATPQuantity !== undefined && parseInt(item.ATPQuantity, 10) > 0) {\r\n const date = new Date();\r\n const today = dayjs(Date.now()).format('D M YY');\r\n const deliveryDate = dayjs(item.SlotDate).format('D M YY');\r\n const currHour = dayjs(Date.now()).format('H');\r\n if (today === deliveryDate) {\r\n const deliveryMessage =\r\n _setTime(item.StartTime) !== ''\r\n ? parseInt(dayjs(_setTime(item.StartTime)).format('H'), 10) < 14 && parseInt(currHour, 10) < 14\r\n ? `Delivery by Today ${dayjs(Date.now()).format('MMM D')}`\r\n : `Delivery by Tomorrow ${dayjs(date.setDate(date.getDate() + 1)).format('MMM D')}`\r\n : '';\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n break;\r\n } else {\r\n const deliveryMessage = `Delivery by ${dayjs(item.SlotDate).format('MMM D')}`;\r\n deliveryDetails = {\r\n deliveryByMessage: deliveryMessage,\r\n locationId: item.Location1!\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n return deliveryDetails;\r\n};\r\n","import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric,\r\n IRequestContext\r\n} from '@msdyn365-commerce/core';\r\n// import { ICategoryPath, ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\r\nimport { getCategoryPathsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { CategoryPathLookup, CategoryPathResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { hasArray } from '../Utilities/emtpyChecker';\r\n\r\n/**\r\n * Category path input\r\n */\r\nexport class GetCategoryPathsInput implements IActionInput {\r\n public readonly ChannelId: number;\r\n public CatalogId?: number;\r\n public productIds?: number[];\r\n // public readonly categoryPathLooksups: CategoryPathLookup[];\r\n public readonly apiSettings: ICommerceApiSettings;\r\n // @ts-ignore\r\n private constructedCacheKey: string | undefined;\r\n\r\n constructor(context: IRequestContext, catalogId?: number, productIds?: number[]) {\r\n this.ChannelId = context.apiSettings.channelId;\r\n this.CatalogId = catalogId; // context.apiSettings.catalogId || 0;\r\n this.productIds = productIds;\r\n // this.categoryPathLooksups = categoryPathLooksups;\r\n this.apiSettings = context.apiSettings;\r\n this.constructedCacheKey = '';\r\n // categoryPathLooksups.forEach(categoryPath=> {\r\n // this.constructedCacheKey+=`${categoryPath.ProductId && categoryPath.ProductId.toString()}|`;\r\n // });\r\n this.constructedCacheKey = this.productIds?.map(ids => ids).join('-').toString();\r\n this.constructedCacheKey += `${this.ChannelId?.toString()}|`;\r\n this.constructedCacheKey += `${this.CatalogId?.toString()}|`;\r\n }\r\n\r\n public getCacheKey = () => `MFRMProductCategoryPath-${this.constructedCacheKey}`;\r\n public getCacheObjectType = () => 'MFRMProductCategoryPath';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the getCategoryPath retail api call\r\n */\r\nexport const createGetCategoryPathsInput = (\r\n inputData: GetCategoryPathsInput,\r\n context: ICreateActionContext>\r\n): IActionInput => {\r\n const productId = inputData.productIds;\r\n if (productId) {\r\n return new GetCategoryPathsInput(context.requestContext, inputData.CatalogId, inputData.productIds);\r\n } else {\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns the category path for a product\r\n */\r\nexport async function getProductsCategoryPathsAction(input: GetCategoryPathsInput, ctx: IActionContext): Promise {\r\n const catPaths: CategoryPathLookup[] = [];\r\n if (!hasArray(input.productIds)) {\r\n return [];\r\n }\r\n for (let productsIter = 0; productsIter < input.productIds!.length; productsIter++) {\r\n catPaths.push({ ProductId: input.productIds![productsIter] });\r\n }\r\n try {\r\n return await getCategoryPathsAsync({ callerContext: ctx, queryResultSettings: { Paging: { Top: input.productIds!.length }, Sorting: {} } }, input.ChannelId, input.CatalogId!, catPaths);\r\n } catch (err) {\r\n console.log(err);\r\n return [];\r\n }\r\n}\r\n\r\nexport const getCategoryPathsActionDataAction = createObservableDataAction({\r\n id: 'GetMFRMProductsCategoryPaths',\r\n action: >getProductsCategoryPathsAction,\r\n input: createGetCategoryPathsInput\r\n});\r\n\r\nexport default getCategoryPathsActionDataAction;\r\n","// tslint:disable\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * MFITryInStore entity interface.\r\n */\r\nexport interface IMFITryInStore {\r\n ZipCode?: string;\r\n StoreId: string;\r\n Products?: string;\r\n Limit: number;\r\n Radius: number;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n}\r\n\r\n/**\r\n * MFITryInStoreInfoResponse entity interface.\r\n */\r\nexport interface IMFITryInStoreInfoResponse {\r\n Status?: string;\r\n Message?: string;\r\n StoreId?: string;\r\n Inventory?: string[];\r\n}\r\n\r\n/**\r\n * MFITryInStore entity class.\r\n */\r\nexport class MFITryInStoreExtensionClass implements IMFITryInStore {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ZipCode: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public StoreId: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Products: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Limit: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Radius: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ZipCode = odataObject.ZipCode;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.StoreId = odataObject.StoreId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Products = odataObject.Products;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Limit = odataObject.Limit;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Radius = odataObject.Radius;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (let i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n let className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat('Class');\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * MFITryInStoreInfoResponse entity class.\r\n */\r\nexport class MFITryInStoreInfoResponseExtensionClass implements IMFITryInStoreInfoResponse {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Status: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Message: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public StoreId: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Inventory: string[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Status = odataObject.Status;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Message = odataObject.Message;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.StoreId = odataObject.StoreId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Inventory = undefined;\r\n if (odataObject.Inventory) {\r\n this.Inventory = [];\r\n for (let i = 0; i < odataObject.Inventory.length; i++) {\r\n if (odataObject.Inventory[i]) {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Inventory[i] = odataObject.Inventory[i];\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Inventory[i] = undefined;\r\n }\r\n }\r\n }\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 * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n// @ts-ignore\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as DataServiceEntities from './TryInStoreDataServiceEntities.g';\r\n\r\n// @ts-ignore\r\nfunction tryInStoresQuery(storeId?: string): DataServiceQuery {\r\n const key = storeId ? { StoreId: storeId } : null;\r\n return new DataServiceQuery('TryInStores', 'MFITryInStore', DataServiceEntities.MFITryInStoreExtensionClass, key);\r\n}\r\n\r\nexport function createMFIGetTryInStoreInfoInput(tryInStoreProductIDs: DataServiceEntities.IMFITryInStore): IDataServiceRequest {\r\n const query = tryInStoresQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'MFIGetTryInStoreInfo',\r\n true,\r\n DataServiceEntities.MFITryInStoreInfoResponseExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IMFITryInStoreInfoResponse' },\r\n { tryInStoreProductIDs: tryInStoreProductIDs }\r\n );\r\n}\r\n\r\nexport function mFIGetTryInStoreInfoAsync(\r\n context: IContext,\r\n tryInStoreProductIDs: DataServiceEntities.IMFITryInStore\r\n): AsyncResult {\r\n const request = createMFIGetTryInStoreInfoInput(tryInStoreProductIDs);\r\n return callActionOrExecute(request, context.callerContext);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { mFIGetTryInStoreInfoAsync } from './TryInStoreDataActionExtension.g';\r\nimport { IMFITryInStore, IMFITryInStoreInfoResponse } from './TryInStoreDataServiceEntities.g';\r\n\r\n/**\r\n * GetTryInStoreInfo Input Action\r\n */\r\n\r\nexport class GetTryInStoreInfoInput implements Msdyn365.IActionInput {\r\n // TODO: Construct the input needed to run the action\r\n public input: IMFITryInStore;\r\n constructor(input: IMFITryInStore) {\r\n this.input = input;\r\n }\r\n\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () =>\r\n `Try-In-Store${this.input.StoreId}-${this.input.ZipCode}-${this.input.Radius}-${this.input.Limit}-${this.input.Products}`;\r\n public getCacheObjectType = () => 'GetTryInStoreInfo';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\n// const createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n// return new GetTryInStoreInfoInput();\r\n// };\r\n\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nasync function getTryInStoreAction(\r\n request: GetTryInStoreInfoInput,\r\n ctx: Msdyn365.IActionContext\r\n): Promise {\r\n if (request.input) {\r\n try {\r\n const result = await mFIGetTryInStoreInfoAsync({ callerContext: ctx }, request.input);\r\n if (result) {\r\n return result;\r\n }\r\n } catch (error) {\r\n console.log('Error', error);\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getTryInStoreAction,\r\n // TODO: Give your data action a unique id\r\n id: 'GetTryInStoreInfo'\r\n // input: createInput\r\n // TODO: Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","import MsDyn365, {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorState } from './store-selector-state';\r\n/**\r\n * storeSelectorState - action input\r\n */\r\nexport class StoreSelectorStateInput implements IActionInput {\r\n public getCacheKey = () => `storeSelectorState`;\r\n public getCacheObjectType = () => 'storeSelectorState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - action\r\n */\r\nexport async function storeSelectorStateAction(input: StoreSelectorStateInput, ctx: IActionContext): Promise {\r\n const prefferedStore: OrgUnitLocation =\r\n MsDyn365.isBrowser && localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : {};\r\n return { isModalOpen: false, prefferedStore: prefferedStore };\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - create new input for create action\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new StoreSelectorStateInput();\r\n};\r\n\r\n/**\r\n * StoreSelectorStateInput - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >storeSelectorStateAction,\r\n input: createInput\r\n});\r\n","\r\n // tslint:disable\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n import * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n\r\n /**\r\n * MFIGetProductRecommendationByStoreIdParameters entity interface.\r\n */\r\n export interface IMFIGetProductRecommendationByStoreIdParameters {\r\n StoreId?: string;\r\n NumberOfProducts: number;\r\n Id?: number;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n }\r\n\r\n /**\r\n * MFIGetProductRecommendationByStoreIdResponse entity interface.\r\n */\r\n export interface IMFIGetProductRecommendationByStoreIdResponse {\r\n ProuctdRecommendationsData?: Entities.ProductSearchResult[];\r\n Message?: string;\r\n }\r\n\r\n /**\r\n * MFIGetProductRecommendationByStoreIdParameters entity class.\r\n */\r\n export class MFIGetProductRecommendationByStoreIdParametersExtensionClass implements IMFIGetProductRecommendationByStoreIdParameters {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public StoreId: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public NumberOfProducts: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.StoreId = odataObject.StoreId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.NumberOfProducts = odataObject.NumberOfProducts;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n /**\r\n * MFIGetProductRecommendationByStoreIdResponse entity class.\r\n */\r\n export class MFIGetProductRecommendationByStoreIdResponseExtensionClass implements IMFIGetProductRecommendationByStoreIdResponse {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProuctdRecommendationsData: Entities.ProductSearchResult[];\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Message: string;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProuctdRecommendationsData = undefined;\r\n if (odataObject.ProuctdRecommendationsData) {\r\n this.ProuctdRecommendationsData = [];\r\n for (var i = 0; i < odataObject.ProuctdRecommendationsData.length; i++) {\r\n if (odataObject.ProuctdRecommendationsData[i]) {\r\n if (odataObject.ProuctdRecommendationsData[i]['@odata.type']) {\r\n var className: string = odataObject.ProuctdRecommendationsData[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.ProuctdRecommendationsData[i] = new EntityClasses[className](odataObject.ProuctdRecommendationsData[i]);\r\n }\r\n } else {\r\n this.ProuctdRecommendationsData[i] = new EntityClasses.ProductSearchResultClass(odataObject.ProuctdRecommendationsData[i]);\r\n }\r\n\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProuctdRecommendationsData[i] = undefined;\r\n }\r\n }\r\n }\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Message = odataObject.Message;\r\n\r\n }\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 * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n // tslint:disable\r\n import { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n // @ts-ignore\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n import * as DataServiceEntities from './ProductRecommendationDataServiceEntities.g';\r\n\r\n // @ts-ignore\r\n function productRecommendationsQuery(id?: number): DataServiceQuery {\r\n const key = (id) ? { Id: id } :null;\r\n return new DataServiceQuery(\"ProductRecommendations\", \"MFIGetProductRecommendationByStoreIdParameters\", DataServiceEntities.MFIGetProductRecommendationByStoreIdParametersExtensionClass, key);\r\n }\r\n\r\n export function createMFIGetProductRecommendationByStoreIdInput(productRecommendationParam: DataServiceEntities.IMFIGetProductRecommendationByStoreIdParameters): IDataServiceRequest {\r\n const query = productRecommendationsQuery();\r\n return query.createDataServiceRequestForOperation('MFIGetProductRecommendationByStoreId', true, DataServiceEntities.MFIGetProductRecommendationByStoreIdResponseExtensionClass, 'false', {bypassCache: 'get', returnEntity: 'DataServiceEntities.IMFIGetProductRecommendationByStoreIdResponse'}, {productRecommendationParam: productRecommendationParam });\r\n }\r\n\r\n export function mFIGetProductRecommendationByStoreIdAsync(context: IContext, productRecommendationParam: DataServiceEntities.IMFIGetProductRecommendationByStoreIdParameters): AsyncResult {\r\n const request = createMFIGetProductRecommendationByStoreIdInput(productRecommendationParam);\r\n return callActionOrExecute(request, context.callerContext);\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 MsDyn365, { RichTextComponent } from '@msdyn365-commerce/core';\r\n\r\nimport * as React from 'react';\r\nimport classname from 'classnames';\r\nimport { useInView } from 'react-intersection-observer';\r\n\r\ninterface IProductData {\r\n image: JSX.Element | null;\r\n price: number | undefined;\r\n carouselIndex: number;\r\n description: string | undefined;\r\n ratingComp: JSX.Element | null;\r\n promoBadge: JSX.Element | undefined;\r\n linkTo: string | undefined;\r\n productID: string | undefined;\r\n productCategory: string | undefined;\r\n productBrand: string | undefined;\r\n productVariant: string | undefined;\r\n enhancedEcommTracking: string | undefined;\r\n productListName: string | undefined;\r\n deliveryMessage: string | undefined;\r\n availableInStoreMessage: string | undefined;\r\n productInventoryLoadStatus: boolean;\r\n}\r\n\r\nexport default (props: IProductData) => {\r\n const styles = 'mfrm-recommendation-module__';\r\n\r\n const {\r\n image,\r\n description,\r\n promoBadge,\r\n linkTo,\r\n price,\r\n ratingComp,\r\n productBrand,\r\n productCategory,\r\n productID,\r\n carouselIndex,\r\n productVariant,\r\n enhancedEcommTracking,\r\n productListName,\r\n deliveryMessage,\r\n availableInStoreMessage,\r\n productInventoryLoadStatus\r\n } = props;\r\n\r\n const listProductName = productListName ? productListName : 'Most Popular Mattresses Module';\r\n\r\n const handleClick = () => {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n //@ts-ignore\r\n utag.link({\r\n event: 'product-click',\r\n enhanced_action: 'product_click',\r\n event_category: 'ecommerce',\r\n event_action: 'product click',\r\n event_label: `${productID}: ${description}`,\r\n event_noninteraction: 'false',\r\n product_list_name: [listProductName],\r\n product_position: [carouselIndex + 1],\r\n product_id: [productID],\r\n product_name: [description],\r\n product_category: [productCategory],\r\n product_brand: [productBrand],\r\n product_variant: [productVariant]\r\n });\r\n }\r\n if (MsDyn365.isBrowser && linkTo) {\r\n window.location.href = linkTo;\r\n }\r\n };\r\n\r\n const productRecommendationref = React.useRef();\r\n React.useEffect(() => {\r\n productCategory && productRecommendationref.current && productRecommendationref.current.addEventListener('click', handleClick);\r\n }, [productCategory]);\r\n\r\n const [productRecommendationViewRef, inView] = useInView({\r\n triggerOnce: true,\r\n rootMargin: '25px'\r\n });\r\n\r\n const isProduct = enhancedEcommTracking === 'product';\r\n\r\n React.useEffect(() => {\r\n if (isProduct && inView && productCategory) {\r\n const pagePath = MsDyn365.isBrowser\r\n ? window.location.href.split(location.host)[1].includes('?')\r\n ? window.location.href.split(location.host)[1].split('?')[0]\r\n : window.location.href.split(location.host)[1]\r\n : '';\r\n //@ts-ignore\r\n utag.link({\r\n event: 'product-impression',\r\n event_category: 'ecommerce',\r\n event_action: 'product impression',\r\n event_label: `${pagePath}`,\r\n event_noninteraction: 'true',\r\n product_impression_list_name: [listProductName],\r\n product_impression_position: [carouselIndex + 1],\r\n product_impression_id: [productID],\r\n product_impression_name: [description],\r\n product_impression_category: [productCategory],\r\n product_impression_brand: [productBrand],\r\n product_impression_variant: [productVariant],\r\n product_impression_price: [price]\r\n });\r\n }\r\n }, [inView, productCategory]);\r\n\r\n const devlieryIndicator = deliveryMessage !== 'Delivery in 6+ Weeks' ?
\r\n :
;\r\n const availableInStoreIndicator = availableInStoreMessage?.slice(0,9) === 'Available' ?
\r\n :
;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ICoreContext, IRequestContext, IImageData, IImageSettings, IGridSettings, Image, IAny, IGeneric } from '@msdyn365-commerce/core';\r\nimport { format } from '@msdyn365-commerce-modules/utilities';\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { mFIGetProductRecommendationByStoreIdAsync } from '../../actions/ProductRecommendationDataActionExtension.g';\r\nimport { AttributeValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getOrgUnitLocationsByArea, GetOrgUnitLocationsByAreaInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\r\nimport dayjs from 'dayjs';\r\nimport { observer } from 'mobx-react';\r\nimport { reaction, observable } from 'mobx';\r\nimport FeaturedSale from './featured-content';\r\nimport { RatingComponent } from '../../themes/mattressfirm/views/components/rating.component';\r\nimport { IMfrmProductRecommendationsData } from './mfrm-product-recommendations.data';\r\nimport { IMfrmProductRecommendationsProps } from './mfrm-product-recommendations.props.autogenerated';\r\nimport * as DataServiceEntities from '../../actions/ProductRecommendationDataServiceEntities.g';\r\nimport { GetCategoryPathsInput, getProductsCategoryPathsAction } from './../../actions/get-mfrm-products-category-paths.action';\r\nimport { IMFICartLine, IMFICLDeliveryScheduleParameters } from '../../actions/CoreProductDataServiceEntities.g';\r\nimport { IMFITryInStore, IMFITryInStoreInfoResponse } from '../../actions/TryInStoreDataServiceEntities.g';\r\nimport getTryInStoreAction, { GetTryInStoreInfoInput } from '../../actions/get-try-in-store-info.action';\r\nimport _getDeliveryByMessage from '../../Utilities/get-delivery-by-message';\r\nimport { buildProductBadge, parseBadgeData } from '../../Utilities/get-product-badge';\r\nimport { _getSoonestDeliveryDate } from '../../Utilities/product-search-result-utils';\r\nimport { getZipCode, getGeoLocationZipCode } from '../../Utilities/get-zipcode';\r\n\r\nexport interface IMfrmProductRecommendationsViewProps extends IMfrmProductRecommendationsProps {\r\n carouselItems: React.ReactNode[] | null;\r\n}\r\nexport interface IFetchedCategoryIds {\r\n productId?: number;\r\n categoryId?: number;\r\n categoryName?: string;\r\n}\r\nexport interface IProductAvailability {\r\n productId?: string;\r\n deliveryMessage?: string;\r\n availableInStore? : boolean;\r\n}\r\n\r\nexport interface IProductRecommendationState {\r\n categoryData: IFetchedCategoryIds[];\r\n productData: ProductSearchResult[] | undefined;\r\n productAvailabilityData: IProductAvailability[];\r\n productInventoryLoadStatus: boolean;\r\n}\r\n@observer\r\nclass MfrmProductRecommendations extends React.PureComponent<\r\nIMfrmProductRecommendationsProps,\r\nIProductRecommendationState\r\n> {\r\n constructor(props: IMfrmProductRecommendationsProps) {\r\n super(props);\r\n\r\n this.state = {\r\n categoryData: [],\r\n productData: [],\r\n productAvailabilityData: [],\r\n productInventoryLoadStatus: false\r\n };\r\n }\r\n public async componentDidMount() {\r\n await this.getModuleData();\r\n\r\n const {\r\n data: { storeSelectorStateManager: storeSelectorStateManager }\r\n } = this.props;\r\n\r\n reaction(\r\n () => storeSelectorStateManager.result && storeSelectorStateManager.result.preferredStore?.StoreId,\r\n async () => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n await this.getModuleData();\r\n }\r\n );\r\n }\r\n\r\n public getModuleData = async (): Promise => {\r\n this.setState({\r\n categoryData: [],\r\n productData: [],\r\n productAvailabilityData: [],\r\n productInventoryLoadStatus : false\r\n });\r\n\r\n const getManualProductData = async () => {\r\n const actionContext = this.props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n const pIds =\r\n this.props.config.featuredProductList &&\r\n this.props.config.featuredProductList.map(function (product) {\r\n return {\r\n ItemId: product.productID\r\n };\r\n });\r\n\r\n const pIdsSorted =\r\n this.props.config.featuredProductList &&\r\n this.props.config.featuredProductList.map(function (product) {\r\n return product.productID;\r\n });\r\n\r\n const searchCriteriaInput: any = {\r\n Context: {\r\n ChannelId: apiSettings.channelId,\r\n CatalogId: apiSettings.catalogId\r\n },\r\n IncludeAttributes: true,\r\n SkipVariantExpansion: true,\r\n SearchCondition: '*',\r\n ItemIds: pIds\r\n };\r\n\r\n const searchResult = await ProductsDataActions.searchByCriteriaAsync(\r\n { callerContext: actionContext },\r\n searchCriteriaInput\r\n );\r\n const sortedSearchResult = searchResult.sort((a, b) => pIdsSorted.indexOf(a.ItemId) - pIdsSorted.indexOf(b.ItemId));\r\n this.setState({ productData: sortedSearchResult });\r\n };\r\n\r\n const categoryNameFromSlug = (this.props?.data?.category?.result?.Name && this.props?.data?.category?.result?.Name) || '';\r\n const displayManualProduct = this.props?.config.displayMethod === 'manual';\r\n try {\r\n if (displayManualProduct) {\r\n await getManualProductData();\r\n } else {\r\n var productRecommendationParam: DataServiceEntities.IMFIGetProductRecommendationByStoreIdParameters =\r\n {\r\n NumberOfProducts: this.props.config.numberOfProducts,\r\n StoreId: await this.getStoreID()\r\n };\r\n await mFIGetProductRecommendationByStoreIdAsync(\r\n { callerContext: this.props.context.actionContext },\r\n productRecommendationParam\r\n ).then(async response => {\r\n if (response.ProuctdRecommendationsData && response.ProuctdRecommendationsData?.length > 3) {\r\n this.setState({ productData: response.ProuctdRecommendationsData });\r\n } else {\r\n await getManualProductData();\r\n }\r\n });\r\n }\r\n await this.getProductsCategories(this.props.context, this._getIsCategoryPage(), categoryNameFromSlug).then(result => {\r\n this.setState({\r\n categoryData: result\r\n });\r\n });\r\n await this.getDeliveryMessageData();\r\n } catch (error) {\r\n console.log('Error loading Product Recommendation Module');\r\n }\r\n };\r\n\r\n public getDeliveryMessageData = async (): Promise => {\r\n const { context: { app, actionContext } } = this.props;\r\n const ZipCode = getZipCode(actionContext) || '';\r\n const products = this.state.productData;\r\n const result : IProductAvailability[] = [];\r\n const StoreId = await this.getStoreID() || '';\r\n\r\n products?.map(async (product, index)=> {\r\n const { AttributeValues, ItemId } = product;\r\n const itemLinesArray: IMFICartLine[] = [];\r\n const lowestPriceVariantRecordId = AttributeValues?.find(\r\n attr => attr.Name?.trim() === app.config.EcomLowestPriceVariantRecIdKey\r\n )?.TextValue;\r\n const itemLine: IMFICartLine = {\r\n ItemId: ItemId,\r\n Quantity: 1,\r\n VariantRecordId: lowestPriceVariantRecordId\r\n };\r\n itemLinesArray.push(itemLine);\r\n\r\n const requestBody: IMFICLDeliveryScheduleParameters = {\r\n InventoryType: 'Delivery',\r\n Weeks: 6,\r\n StoreId: '',\r\n Page: 'pdp',\r\n RequestedDate: dayjs().format('MM/DD/YYYY'),\r\n ZipCode,\r\n ItemLines: itemLinesArray\r\n };\r\n\r\n const tryInStoreProductIDs: IMFITryInStore = {\r\n ZipCode,\r\n StoreId,\r\n Products: ItemId,\r\n Limit: app.config.tryInStoreLimit || 10,\r\n Radius: app.config.tryInStoreLookupRadius || 50\r\n };\r\n\r\n await _getDeliveryByMessage(requestBody,this.props.context,false).then(response => {\r\n const deliveryDetails = (response?.ATPInventoryData && response?.ATPInventoryData.length > 0) ? _getSoonestDeliveryDate(response?.ATPInventoryData) : undefined;\r\n result.push({productId: ItemId , deliveryMessage: deliveryDetails?.deliveryByMessage, availableInStore: false});\r\n });\r\n\r\n const getTryInStoreInfoInput = new GetTryInStoreInfoInput(tryInStoreProductIDs);\r\n const availableInStore = await getTryInStoreAction(getTryInStoreInfoInput, actionContext).then(response => {\r\n const data : IMFITryInStoreInfoResponse = response;\r\n return data.Inventory && data.Inventory.length > 0;\r\n });\r\n result[index].availableInStore = availableInStore;\r\n this.setState({ productAvailabilityData: result});\r\n this.setState({ productInventoryLoadStatus : true});\r\n });\r\n };\r\n\r\n @observable\r\n public getStoreID = async (): Promise => {\r\n const {\r\n context: { actionContext },\r\n data: { storeSelectorStateManager }\r\n } = this.props;\r\n let defaultStoreId: string | undefined;\r\n const storeObj = localStorage.getItem('_msdyn365__preferredStore_');\r\n const selectedStoreID = storeObj && JSON.parse(storeObj);\r\n\r\n if (selectedStoreID) {\r\n defaultStoreId = selectedStoreID.StoreId;\r\n } else {\r\n const zipCode = getGeoLocationZipCode(actionContext) || '';\r\n\r\n const location = await (await storeSelectorStateManager).geoLocate(zipCode, actionContext);\r\n const lat = location?.latitude || 0;\r\n const long = location?.longitude || 0;\r\n const calRadius = 50;\r\n const distanceUnitValue = 0;\r\n const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(lat, long, calRadius, distanceUnitValue);\r\n\r\n const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n if (orgUnitLocations) {\r\n defaultStoreId =\r\n orgUnitLocations &&\r\n orgUnitLocations[0]?.OrgUnitAvailability &&\r\n orgUnitLocations[0].OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber;\r\n }\r\n }\r\n return defaultStoreId;\r\n };\r\n\r\n public 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\n public 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 = this.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\n public _getIsCategoryPage(): boolean {\r\n const { context } = this.props;\r\n const requestContext = context && context.request;\r\n const pageType =\r\n requestContext.urlTokens.pageType === 'Category' || (requestContext.query && requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n return pageType?.toLowerCase() === 'search' ? false : true;\r\n }\r\n\r\n public getProductsCategories = async (\r\n context: ICoreContext>,\r\n isCategoryPage: boolean,\r\n categoryNameFromSlug: string | undefined\r\n ): Promise => {\r\n if (this.state.productData && this.state.productData.length > 0) {\r\n let catName: string | undefined = '';\r\n if (isCategoryPage) {\r\n catName = categoryNameFromSlug;\r\n }\r\n // VSI Customization End - 42859\r\n const productIds: number[] = [];\r\n this.state.productData.forEach(prod => {\r\n const prodId = prod.AttributeValues?.find(attr => attr.KeyName?.trim() === 'EcomLowestPriceVariantRec')?.TextValue;\r\n prodId && productIds.push(Number(prodId));\r\n });\r\n\r\n const catalogId = context.actionContext.requestContext.apiSettings.catalogId;\r\n const productsCategories = await getProductsCategoryPathsAction(\r\n new GetCategoryPathsInput(context.request, catalogId, productIds),\r\n context.actionContext\r\n );\r\n const categoryIds: IFetchedCategoryIds[] = [];\r\n for (let productCategoriesIter = 0; productCategoriesIter < productsCategories.length; productCategoriesIter++) {\r\n if (\r\n productsCategories[productCategoriesIter] &&\r\n productsCategories[productCategoriesIter].CategoryPath &&\r\n productsCategories[productCategoriesIter].CategoryPath!.length > 0\r\n ) {\r\n const catPath = productsCategories[productCategoriesIter].CategoryPath;\r\n const catPathSegments = catPath![0].Segments;\r\n if (catPathSegments && catPathSegments.length > 0) {\r\n const catId = catPathSegments.length > 0 ? catPathSegments[catPathSegments.length - 1].CategoryId : -1;\r\n if (!isCategoryPage) {\r\n catName = catPathSegments.length > 0 ? catPathSegments[catPathSegments.length - 1].CategoryName : '';\r\n }\r\n\r\n categoryIds.push({\r\n productId: productsCategories[productCategoriesIter].ProductId,\r\n categoryId: catId,\r\n categoryName: catName\r\n });\r\n }\r\n }\r\n }\r\n return categoryIds;\r\n }\r\n return [];\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.state.productData) {\r\n return null;\r\n }\r\n\r\n const viewProps: IMfrmProductRecommendationsViewProps = {\r\n ...(this.props as IMfrmProductRecommendationsProps),\r\n carouselItems: this._getCarouselItems()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n private _getCarouselItems = (): React.ReactNode[] | null => {\r\n const storeObj = MsDyn365.isBrowser && localStorage.getItem('_mfrm__prefferedStore_');\r\n const selectedStoreCity = storeObj && (JSON.parse(storeObj)).city;\r\n\r\n if (this.state.productData?.length === 0 ) {\r\n return null;\r\n }\r\n return this.state.productData!.map((product, index) => {\r\n const { Name, AverageRating, TotalRatings, Price, AttributeValues, PrimaryImageUrl, ItemId } = product;\r\n const { context, id, typeName, config } = this.props;\r\n const lowestPriceVariantRecordId = AttributeValues?.find(\r\n attr => attr.Name?.trim() === context.app.config.EcomLowestPriceVariantRecIdKey\r\n )?.TextValue;\r\n const isMasterProduct = product.IsMasterProduct;\r\n if (isMasterProduct && lowestPriceVariantRecordId !== undefined && lowestPriceVariantRecordId !== '') {\r\n product.RecordId = parseInt(lowestPriceVariantRecordId, 10);\r\n }\r\n const queryBasedSelection = context.app.config.queryBasedVariantSelection;\r\n let productUrl = getProductPageUrlSync(\r\n product.Name || '',\r\n queryBasedSelection ? product.MasterProductId || product.RecordId : product.RecordId,\r\n context && context.actionContext,\r\n undefined\r\n );\r\n if (queryBasedSelection) {\r\n const variantIdQueryParams = productUrl.includes('?') ? `&variantid=${product.RecordId}` : `?variantid=${product.RecordId}`;\r\n productUrl += variantIdQueryParams;\r\n }\r\n\r\n const 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 =>\r\n 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 const renderProductPlacementImage = (\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string\r\n ): JSX.Element | null => {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\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 const badgeAttributeToUse = context.app.config.productBadgeAttribute;\r\n const brand = AttributeValues?.find(attr => attr.KeyName?.trim() === 'VendorBrand')?.TextValue;\r\n const productVariant = AttributeValues?.find(attr => attr.Name?.trim() === 'ProductVariant')?.TextValue;\r\n\r\n const matchedProduct = this.state.productAvailabilityData.find(item => item.productId === ItemId);\r\n\r\n const deliveryInfomation = matchedProduct?.deliveryMessage ?\r\n matchedProduct?.deliveryMessage\r\n :'Delivery in 6+ Weeks';\r\n const availableInStoreInformation = matchedProduct?.availableInStore ?\r\n `Available to try in ${selectedStoreCity}`\r\n :`Not available to try in ${selectedStoreCity}`;\r\n\r\n return (\r\n \r\n );\r\n });\r\n };\r\n}\r\n\r\nexport default MfrmProductRecommendations;\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 Carousel from 'mfcl/Carousel';\r\nimport * as React from 'react';\r\nimport _getViewPort from '../../Utilities/get-view-port';\r\nimport { IMfrmProductRecommendationsViewProps } from './mfrm-product-recommendations';\r\nimport { Image } from '@msdyn365-commerce/core';\r\n\r\nexport default (props: IMfrmProductRecommendationsViewProps) => {\r\n const styles = 'mfrm-recommendation-module__';\r\n const [loaded, setIsLoaded] = React.useState(false);\r\n const hideLoader = () => {\r\n setIsLoaded(true);\r\n };\r\n const { carouselItems } = props;\r\n const minDesktop = carouselItems && carouselItems.length === 4 ? 'min-desktop' : '';\r\n const mobile = _getViewPort(props.context) === 'sm';\r\n\r\n React.useEffect(hideLoader, []);\r\n return (\r\n carouselItems &&\r\n carouselItems.length > 3 && (\r\n <>\r\n {props.config.avatarImage &&
\r\n
\r\n {props.config.avatarImage && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n {props.config.heading &&
{props.config.heading.text}
}\r\n {props.config.subHeading && (\r\n
{props.config.subHeading.text}
\r\n )}\r\n {props.config.link && (\r\n \r\n {props.config.link?.linkText}\r\n \r\n )}\r\n
\r\n
\r\n
}\r\n
\r\n
\r\n {mobile ? (\r\n
\r\n \r\n {carouselItems}\r\n \r\n
\r\n ) : (\r\n \r\n {carouselItems}\r\n \r\n )}\r\n
\r\n
\r\n \r\n )\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.avgRating}/5 ({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","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['mfrm-product-recommendations'] = {\n c: () => require('partner/modules/mfrm-product-recommendations/mfrm-product-recommendations.tsx'),\n $type: 'contentModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'storeSelectorState', path:'data-actions/store-selector-state-data-action', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-product-recommendations',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-product-recommendations'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/store-selector-state-data-action';\n let dataAction = require('partner/data-actions/store-selector-state-data-action');\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|mfrm-product-recommendations|mfrm-product-recommendations'] = {\n c: () => require('partner/modules/mfrm-product-recommendations/mfrm-product-recommendations.view.tsx'),\n cn: '__local__-__local__-mfrm-product-recommendations'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport { IListMapViewState, ILoadMapApiInput, IStoreInfo, IStoreSelectionStateContext, IStoreSelectorLocation, IStoreSelectorStateManager } from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(storeId?: string, storeName?: string | undefined, writeToCookie: boolean = false, latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (!searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl = actionContext.requestContext.app && actionContext.requestContext.app.config && actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT}/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise((resolve) => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${input.market ? `&setMkt=${input.market}` : ''}`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["async","request","context","isCached","getDeliveryMessageActionInput","GetDeliveryMessageInput","result","getDeliveryMessageAction","actionContext","error","console","log","dayjs","tz","utc","isBetween","format","defaultImageSettings","viewports","xs","q","w","h","disableLazyLoad","parseBadgeData","badgeData","requestContext","dataSegments","scheduleStart","scheduleEnd","badgeType","parsedScheduleStart","startDate","startTime","parsedScheduleEnd","endDate","endTime","split","e","startMoment","replace","endMoment","startMomentFormatted","endMomentFormatted","isValid","baseUrl","apiSettings","baseImageUrl","substring","length","removed$","parsedBadgeType","toLowerCase","altText","src","alt","start","convertTimeZone","end","time","local","buildProductBadge","parsedBadgeData","React","Image","className","gridSettings","title","imageSettings","renderProductBadge","attributeName","finalizedBadges","map","badge","parsedBadge","MsDyn365","window","innerWidth","sm","md","lg","getZipCode","ctx","geolocationZipCode","geoLocation","zipCode","res","cookie","Cookies","zipcode","get","undefined","getGeoLocationZipCode","_getEyebrowMessage","products","priceGroupForAPICall","app","config","priceGroup","items","item","singleItem","ItemId","DistinctProductVariant","push","requestBody","PriceGroup","Items","getEyebrowMessageInput","GetEyebrowMessageInput","getEyebrowAction","_makeDeliveryMessage","days","deliveryByMessage","date","Date","daysSpan","deliveryDate","now","deliveryByMessageRange","parseInt","numberOfDays","newDate","setDate","getDate","flag","_setTime","temp","newDatewithTime","toUpperCase","_getSoonestDeliveryDate","coreProductATPData","deliveryDetails","locationId","index","Available","ATPQuantity","today","SlotDate","currHour","StartTime","Location1","GetCategoryPathsInput","constructor","catalogId","productIds","getCacheKey","this","constructedCacheKey","getCacheObjectType","dataCacheType","ChannelId","channelId","CatalogId","ids","join","toString","createGetCategoryPathsInput","inputData","Error","getProductsCategoryPathsAction","input","catPaths","hasArray","productsIter","ProductId","getCategoryPathsAsync","callerContext","queryResultSettings","Paging","Top","Sorting","err","getCategoryPathsActionDataAction","createObservableDataAction","id","action","MFITryInStoreExtensionClass","odataObject","ZipCode","StoreId","Products","Limit","Radius","ExtensionProperties","i","substr","lastIndexOf","concat","EntityClasses","MFITryInStoreInfoResponseExtensionClass","Status","Message","Inventory","createMFIGetTryInStoreInfoInput","tryInStoreProductIDs","storeId","key","DataServiceQuery","DataServiceEntities","tryInStoresQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","GetTryInStoreInfoInput","Msdyn365","callActionOrExecute","mFIGetTryInStoreInfoAsync","StoreSelectorStateInput","storeSelectorStateAction","isModalOpen","prefferedStore","localStorage","getItem","JSON","parse","MFIGetProductRecommendationByStoreIdParametersExtensionClass","NumberOfProducts","Id","MFIGetProductRecommendationByStoreIdResponseExtensionClass","ProuctdRecommendationsData","createMFIGetProductRecommendationByStoreIdInput","productRecommendationParam","productRecommendationsQuery","props","styles","image","description","promoBadge","linkTo","price","ratingComp","productBrand","productCategory","productID","carouselIndex","productVariant","enhancedEcommTracking","productListName","deliveryMessage","availableInStoreMessage","productInventoryLoadStatus","listProductName","handleClick","utag","link","event","enhanced_action","event_category","event_action","event_label","event_noninteraction","product_list_name","product_position","product_id","product_name","product_category","product_brand","product_variant","location","href","productRecommendationref","current","addEventListener","productRecommendationViewRef","inView","useInView","triggerOnce","rootMargin","isProduct","pagePath","host","includes","product_impression_list_name","product_impression_position","product_impression_id","product_impression_name","product_impression_category","product_impression_brand","product_impression_variant","product_impression_price","devlieryIndicator","availableInStoreIndicator","slice","ref","classname","RichTextComponent","text","MfrmProductRecommendations","super","getModuleData","setState","categoryData","productData","productAvailabilityData","getManualProductData","pIds","featuredProductList","product","pIdsSorted","searchCriteriaInput","Context","IncludeAttributes","SkipVariantExpansion","SearchCondition","ItemIds","sortedSearchResult","ProductsDataActions","sort","a","b","indexOf","categoryNameFromSlug","data","category","Name","displayManualProduct","displayMethod","numberOfProducts","getStoreID","mFIGetProductRecommendationByStoreIdAsync","then","response","getProductsCategories","_getIsCategoryPage","getDeliveryMessageData","state","AttributeValues","itemLinesArray","lowestPriceVariantRecordId","find","attr","trim","EcomLowestPriceVariantRecIdKey","TextValue","itemLine","Quantity","VariantRecordId","InventoryType","Weeks","Page","RequestedDate","ItemLines","tryInStoreLimit","tryInStoreLookupRadius","_getDeliveryByMessage","ATPInventoryData","productId","availableInStore","getTryInStoreInfoInput","getTryInStoreAction","storeSelectorStateManager","defaultStoreId","storeObj","selectedStoreID","geoLocate","lat","latitude","long","longitude","calRadius","distanceUnitValue","orgUnitLocationsInput","GetOrgUnitLocationsByAreaInput","orgUnitLocations","getOrgUnitLocationsByArea","OrgUnitAvailability","OrgUnitLocation","OrgUnitNumber","getRatingAriaLabel","rating","ratingAriaLabel","roundedRating","toFixed","renderRating","typeName","avgRating","totalRatings","ariaLabel","numRatings","RatingComponent","ratingCount","readOnly","isCategoryPage","catName","forEach","prod","prodId","KeyName","Number","productsCategories","categoryIds","productCategoriesIter","CategoryPath","catPathSegments","Segments","catId","CategoryId","CategoryName","categoryId","categoryName","_getCarouselItems","selectedStoreCity","city","AverageRating","TotalRatings","Price","PrimaryImageUrl","IsMasterProduct","RecordId","queryBasedSelection","queryBasedVariantSelection","productUrl","getProductPageUrlSync","MasterProductId","variantIdQueryParams","badgeAttributeToUse","productBadgeAttribute","brand","matchedProduct","deliveryInfomation","availableInStoreInformation","FeaturedSale","imageUrl","img","imageProps","cropFocalRegion","Object","loadFailureBehavior","renderProductPlacementImage","URL","attributes","currAttribute","reaction","preferredStore","pageType","urlTokens","query","render","viewProps","carouselItems","renderView","__decorate","observable","observer","loaded","setIsLoaded","minDesktop","mobile","_getViewPort","avatarImage","heading","subHeading","linkUrl","destinationUrl","target","openInNewTab","linkText","Carousel","itemsToShow","hideIndicators","hideControls","controlStyle","controlClass","disableEndButtons","variableWidth","responsive","breakpoint","layoutGap","RatingComponentActions","onSliderChanged","setRating","value","lastSelectedRating","onChange","onMouseLeave","_event","onMouseOver","getIndex","onClick","Rating","initialRating","useState","useEffect","newRating","starControl","renderStars","tabIndex","defaultProps","currentRating","type","min","max","step","mouseOver","floor","Math","remainder","filled","half","stars","glyphClass","role","getAttribute","msdyn365Commerce","component","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","_context","selectedStoreLocationId","storeName","writeToCookie","StoreName","Latitude","Longitude","_writeToCookie","stringify","lastInlineShownStoreInfo","_removeCookie","removeItem","setItem","cookieValue","computed","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","encodeURI","geolocationApiUrl","requestUrl","Promise","resolve","script","document","createElement","setAttribute","remove","resourceSets","resources","point","coordinates","body","appendChild","StringExtensions","getElementById","url","lang","market","reject","defer","mapAPIReady","isMapApiLoaded","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","module","exports","ReactDOM"],"sourceRoot":""}