{"version":3,"file":"static/js/bfbcfe81a3ad704c4882.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/actions/get-product-info.ts?e5bc","webpack://henrys-ecommerce/./src/actions/get-product-promotions.action.ts?ea24","webpack://henrys-ecommerce/./src/actions/getProductVariantOrMaster.ts?9116","webpack://henrys-ecommerce/./src/modules/hei-product-promotions/hei-product-promotions.tsx?6aba","webpack://henrys-ecommerce/./src/modules/hei-product-promotions/hei-product-promotions.view.tsx?0e7a","webpack://henrys-ecommerce/./lib/hei-product-promotions/module-registration.js?a0d0","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["import {\r\n createObservableDataAction,\r\n IAction,\r\n ICreateActionContext,\r\n IActionContext,\r\n CacheType,\r\n IActionInput\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductsDataActions, retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IProductInfo } from './DataServiceEntities.g';\r\nimport { getProductInfoInput } from './DataActionExtension.g';\r\n\r\n/**\r\n * GetProductInfoInput\r\n */\r\nclass GetProductInfoInput implements IActionInput {\r\n public readonly productId: number;\r\n\r\n constructor(productId: number) {\r\n this.productId = productId;\r\n }\r\n\r\n public getCacheKey = () => `${this.productId}`;\r\n public getCacheObjectType = () => 'HEI-ProductInfo';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nasync function action(input: GetProductInfoInput, ctx: IActionContext): Promise {\r\n const product = await ProductsDataActions.getByIdAsync(\r\n { callerContext: ctx },\r\n input.productId,\r\n ctx.requestContext.apiSettings.channelId\r\n );\r\n\r\n let itemId = product?.ItemId;\r\n const newSkuInfo = product.ExtensionProperties?.find(ep => ep.Key === 'NewSku')?.Value?.StringValue;\r\n if (newSkuInfo) {\r\n const newProductSku = newSkuInfo.split(':')[1];\r\n if (newProductSku) {\r\n itemId = newProductSku;\r\n }\r\n }\r\n\r\n if (!itemId) {\r\n throw new Error('Unable to get product SKU');\r\n }\r\n\r\n const ProductInfoInput = getProductInfoInput(itemId);\r\n return retailAction(ProductInfoInput, ctx);\r\n}\r\n\r\n/**\r\n * Get Warranty Info Data Action\r\n */\r\nexport default createObservableDataAction({\r\n action: >action,\r\n input: (context: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetProductInfoInput(+productId);\r\n } else {\r\n throw new Error('Unable to create GetProductInfoInput, no productId found on module config or query');\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 */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getSelectedProductIdFromActionInput, getDimensionValuesFromQuery } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductDimension, retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { IGetProductPromotionResponse } from './DataServiceEntities.g';\r\nimport { getProductPromotionsV2Input } from './DataActionExtension.g';\r\nimport { getProductVariantOrMaster } from './getProductVariantOrMaster';\r\n\r\n/**\r\n * GetProductPromotions Input Action\r\n */\r\nexport class GetProductPromotionsInput implements Msdyn365.IActionInput {\r\n public readonly recordId: number;\r\n public readonly dimensionValues: ProductDimension[];\r\n\r\n constructor(recordId: number, dimensionValues: ProductDimension[]) {\r\n this.recordId = recordId;\r\n this.dimensionValues = dimensionValues;\r\n }\r\n\r\n public getCacheKey = () => `${this.recordId}-${this.dimensionValues.map(v => v.DimensionValue?.Value ?? '').join('|')}`;\r\n public getCacheObjectType = () => 'HEI-ProductPromotions';\r\n public dataCacheType = (): Msdyn365.CacheType => (process.env.NODE_ENV === 'development' ? 'application' : 'none');\r\n}\r\n\r\nconst createInput = (context: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n const matchingDimensionValues = getDimensionValuesFromQuery(context.requestContext.url.requestUrl);\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetProductPromotionsInput(+productId, matchingDimensionValues);\r\n } else {\r\n throw new Error('Unable to create GetProductPromotionsInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\nexport async function getProductPromotionsAction(\r\n input: GetProductPromotionsInput,\r\n context: Msdyn365.IActionContext\r\n): Promise {\r\n const matchingDimensionValues = input.dimensionValues;\r\n process.env.NODE_ENV === 'development' && console.log('get-product-promotions.action', input.recordId, matchingDimensionValues);\r\n const productVariant = await getProductVariantOrMaster(input.recordId, matchingDimensionValues, context);\r\n\r\n const distinctProductVariantId = productVariant.RecordId;\r\n process.env.NODE_ENV === 'development' && console.log('get-product-promotions.action', input.recordId, distinctProductVariantId);\r\n const productPromotionsInput = getProductPromotionsV2Input(input.recordId, distinctProductVariantId);\r\n return retailAction(productPromotionsInput, context);\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getProductPromotionsAction,\r\n id: 'hei-get-product-promotions',\r\n input: createInput\r\n // isBatched: true\r\n});\r\n","import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n QueryResultSettingsProxy,\r\n generateProductImageUrl,\r\n createInventoryAvailabilitySearchCriteria,\r\n ArrayExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n ProductDimension,\r\n ProductDimensionAvailabilitySearchCriteria,\r\n ProductsDataActions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\r\n\r\n/**\r\n * Retrieves product dimensions with availabilities.\r\n * @param product - Product for which the dimensions need to be retrieved.\r\n * @param matchingDimensionValues - Selected dimensions - filter criteria for the dimensions API.\r\n * @param context - Action context.\r\n * @param catalogId - Catalog id.\r\n * @returns Array of dimensions.\r\n */\r\nconst getFullDimensions = async (\r\n product: SimpleProduct,\r\n matchingDimensionValues: ProductDimension[],\r\n context: Msdyn365.IActionContext,\r\n catalogId?: number\r\n) => {\r\n let fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = [];\r\n const fullDimensionPromises = (product.Dimensions ?? []).map(dimension => {\r\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\r\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria = {\r\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\r\n MatchingDimensionValues: matchingDimensionValues,\r\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\r\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\r\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue,\r\n CatalogId: catalogId\r\n };\r\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\r\n { callerContext: context, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context) },\r\n product.MasterProductId ? product.MasterProductId : product.RecordId,\r\n searchCriteria\r\n );\r\n\r\n return dimensionValuesPromise.then(dimensionValues => {\r\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\r\n ...dimension,\r\n dimensionValuesWithInventory: dimensionValues\r\n };\r\n return fullDimension;\r\n });\r\n });\r\n fullDimensions = await Promise.all(fullDimensionPromises);\r\n return fullDimensions;\r\n};\r\n\r\n/**\r\n * Retrieves product variant for the given input or undefined if not found.\r\n * @param input - Action input.\r\n * @param context - Action context.\r\n * @param fullDimensions - Product dimensions with availabilities.\r\n * @returns A product variant that is available or undefined.\r\n */\r\nconst getProductVariant = async (context: Msdyn365.IActionContext, fullDimensions: IProductDimensionsWithAvailabilitiesFull[]) => {\r\n let productVariant: SimpleProduct | undefined;\r\n if (\r\n ArrayExtensions.hasElements(fullDimensions) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory) &&\r\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory[0].ProductIds)\r\n ) {\r\n const variantProductId = fullDimensions[0].dimensionValuesWithInventory[0].ProductIds[0];\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n //bypassCache: input.bypassCache\r\n },\r\n context.requestContext.apiSettings.channelId,\r\n [variantProductId],\r\n null,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n productVariant = result[0];\r\n productVariant = { ...productVariant };\r\n const variantImageUrl = generateProductImageUrl(productVariant, context.requestContext.apiSettings);\r\n\r\n if (variantImageUrl) {\r\n productVariant.PrimaryImageUrl = variantImageUrl;\r\n }\r\n }\r\n\r\n return productVariant;\r\n};\r\n\r\n/**\r\n * Checks if given product has any unmatched dimensions.\r\n * Modifies product entity to use matched dimension values.\r\n * @param product - The product to analyze and modify.\r\n * @param matchingDimensionValues - Matched dimensions.\r\n * @returns True if has any unmatched dimension, false if all dimensions are specified.\r\n */\r\nconst checkIfHasUnmatchedDimensions = (product: SimpleProduct, matchingDimensionValues: ProductDimension[]): boolean => {\r\n let hasUnmatchedDimension: boolean = false;\r\n if (product.Dimensions) {\r\n product.Dimensions = product.Dimensions.map(dimension => {\r\n return { ...dimension };\r\n });\r\n for (const dimension of product.Dimensions) {\r\n const matchedTargetDimension = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimension) {\r\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\r\n } else {\r\n hasUnmatchedDimension = true;\r\n }\r\n }\r\n }\r\n return hasUnmatchedDimension;\r\n};\r\n\r\nconst getProductVariantOrMaster = async (\r\n productId: number,\r\n matchingDimensionValues: ProductDimension[],\r\n context: Msdyn365.IActionContext\r\n) => {\r\n const result = await ProductsDataActions.getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n // bypassCache: input.bypassCache\r\n },\r\n context.requestContext.apiSettings.channelId,\r\n [productId],\r\n null,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n\r\n let product = result[0];\r\n\r\n // Need to dereference this before editing it. Otherwise we might not\r\n // properly get the mobx events because if things aren't properly observable\r\n // they won't fire when you set them, and then if you don't deref the value in\r\n // the cache will match the value when you try to save it, so it won't detect any\r\n // changes there either\r\n product = { ...product };\r\n\r\n // Not all dimensions are selected\r\n if (matchingDimensionValues.find(dv => !dv.DimensionValue)) {\r\n return product;\r\n }\r\n\r\n const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\r\n\r\n if (hasUnmatchedDimension) {\r\n return product;\r\n }\r\n\r\n const fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = await getFullDimensions(\r\n product,\r\n matchingDimensionValues,\r\n context,\r\n context.requestContext.apiSettings.catalogId\r\n );\r\n\r\n // Retrieve product variants only if matching dimensions are provided.\r\n const productVariant: SimpleProduct | undefined = ArrayExtensions.hasElements(matchingDimensionValues)\r\n ? await getProductVariant(context, fullDimensions)\r\n : undefined;\r\n\r\n return productVariant ?? product;\r\n};\r\n\r\nexport { getProductVariantOrMaster };\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 * as React from 'react';\r\n\r\nimport { IHeiProductPromotionsData } from './hei-product-promotions.data';\r\nimport { IHeiProductPromotionsProps } from './hei-product-promotions.props.autogenerated';\r\n\r\nexport interface IHeiProductPromotionsViewProps extends IHeiProductPromotionsProps {}\r\n\r\n/**\r\n *\r\n * HeiProductPromotions component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass HeiProductPromotions extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default HeiProductPromotions;\r\n","import * as React from 'react';\r\nimport { IHeiProductPromotionsViewProps } from './hei-product-promotions';\r\nimport { IGetProductPromotionResponse } from '../../actions/DataServiceEntities.g';\r\n\r\nexport default (props: IHeiProductPromotionsViewProps) => {\r\n const {\r\n data: { productPromotions, productInfo },\r\n context: {\r\n request: { sitePath }\r\n }\r\n } = props;\r\n\r\n const [promotions, setPromotions] = React.useState(productPromotions.result?.Promotions ?? []);\r\n\r\n React.useEffect(() => {\r\n const listener = (evt: Event) => {\r\n const customEvt = evt as CustomEvent;\r\n process.env.NODE_ENV === 'development' && console.log('hei-product-promotions', customEvt.detail);\r\n\r\n if (customEvt.detail) {\r\n setPromotions(customEvt.detail.Promotions ?? []);\r\n }\r\n };\r\n\r\n window.addEventListener('onProductPromotionsChange', listener);\r\n\r\n return () => {\r\n window.removeEventListener('onProductPromotionsChange', listener);\r\n };\r\n }, []);\r\n\r\n const offers = promotions.filter(o => o.OfferId);\r\n const productRebate = productInfo.result?.RebateHtml;\r\n const hasContent = (offers && offers.length > 0) || !!productRebate;\r\n\r\n if (hasContent) {\r\n return (\r\n
\r\n {!!productRebate &&
}\r\n {offers && offers.length > 0 && (\r\n
    \r\n {offers.map(o => {\r\n return (\r\n
  • \r\n {o.Name}\r\n
  • \r\n );\r\n })}\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n There's no offer available at this time.\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['hei-product-promotions'] = {\n c: () => require('partner/modules/hei-product-promotions/hei-product-promotions.tsx'),\n $type: 'contentModule',\n da: [{name:'productInfo', path:'actions/get-product-info', runOn: 0},{name:'productPromotions', path:'actions/get-product-promotions.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-product-promotions',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-product-promotions'\n });\n \n\n {\n const sanitizedActionPath = 'actions/get-product-info';\n let dataAction = require('partner/actions/get-product-info');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-product-promotions.action';\n let dataAction = require('partner/actions/get-product-promotions.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|hei-product-promotions|hei-product-promotions'] = {\n c: () => require('partner/modules/hei-product-promotions/hei-product-promotions.view.tsx'),\n cn: '__local__-__local__-hei-product-promotions'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["GetProductInfoInput","constructor","productId","getCacheKey","this","getCacheObjectType","dataCacheType","createObservableDataAction","action","async","input","ctx","_product$ExtensionPro","product","ProductsDataActions","callerContext","requestContext","apiSettings","channelId","itemId","ItemId","newSkuInfo","ExtensionProperties","find","ep","Key","Value","StringValue","newProductSku","split","Error","ProductInfoInput","getProductInfoInput","retailAction","context","getSelectedProductIdFromActionInput","GetProductPromotionsInput","recordId","dimensionValues","map","v","_v$DimensionValue$Val","_v$DimensionValue","DimensionValue","join","getProductPromotionsAction","matchingDimensionValues","distinctProductVariantId","getProductVariantOrMaster","RecordId","productPromotionsInput","getProductPromotionsV2Input","Msdyn365","id","getDimensionValuesFromQuery","url","requestUrl","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","catalogId","_objectSpread","dv","checkIfHasUnmatchedDimensions","hasUnmatchedDimension","Dimensions","dimension","matchedTargetDimension","targetDimension","DimensionTypeValue","fullDimensions","_product$Dimensions","fullDimensionPromises","shippingInventoryConfiguration","createInventoryAvailabilitySearchCriteria","undefined","searchCriteria","RequestedDimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","CatalogId","MasterProductId","then","dimensionValuesWithInventory","Promise","all","getFullDimensions","productVariant","ArrayExtensions","hasElements","ProductIds","variantProductId","variantImageUrl","generateProductImageUrl","PrimaryImageUrl","getProductVariant","HeiProductPromotions","React","render","props","renderView","_productPromotions$re","_productPromotions$re2","_productInfo$result","data","productPromotions","productInfo","request","sitePath","promotions","setPromotions","result","Promotions","listener","evt","customEvt","_customEvt$detail$Pro","detail","window","addEventListener","removeEventListener","offers","filter","o","OfferId","productRebate","RebateHtml","length","className","dangerouslySetInnerHTML","__html","_o$OfferId","key","href","toLowerCase","Name","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}