{"version":3,"file":"static/js/a703e7f084779459e47b.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/actions/get-all-dimensions-for-product.ts?0098","webpack://henrys-ecommerce/./src/actions/getProductVariantOrMaster.ts?9116","webpack://henrys-ecommerce/./src/actions/get-applicable-warranties.action.ts?6ef5","webpack://henrys-ecommerce/./src/actions/get-full-available-inventory-nearby.action.ts?562c","webpack://henrys-ecommerce/./src/actions/get-product-promotions.action.ts?ea24","webpack://henrys-ecommerce/./src/common/useGoogleAnalytics.tsx?0c00","webpack://henrys-ecommerce/./src/common/utilities/createCanonicalUrl.ts?7ccf","webpack://henrys-ecommerce/./src/common/radio-button-list/radio-button-list.tsx?9f8a","webpack://henrys-ecommerce/./src/common/buybox-product-configure.tsx?88cc","webpack://henrys-ecommerce/./src/modules/hei-buybox/components/hei-buybox-find-in-store.tsx?c59e","webpack://henrys-ecommerce/./src/modules/hei-buybox/common/buybox-components.tsx?a5b7","webpack://henrys-ecommerce/./src/modules/hei-buybox/hei-buybox.tsx?dfcf","webpack://henrys-ecommerce/./src/modules/hei-buybox/hei-buybox.view.tsx?7e25","webpack://henrys-ecommerce/./src/themes/henrys/views/components/AuthorizedDealerBadge.tsx?1105","webpack://henrys-ecommerce/./src/themes/henrys/views/components/MfrCode.tsx?bb8c","webpack://henrys-ecommerce/./src/themes/henrys/views/components/HideablePrice.tsx?c60a","webpack://henrys-ecommerce/./src/themes/henrys/views/components/ProductPromotions.tsx?7465","webpack://henrys-ecommerce/./src/themes/henrys/views/components/add-this-share.tsx?ff1a","webpack://henrys-ecommerce/./src/themes/henrys/views/components/WarrantySelection.tsx?0029","webpack://henrys-ecommerce/./src/themes/henrys/views/components/ProductWarranty.tsx?8b39","webpack://henrys-ecommerce/./src/themes/henrys/views/components/JsonLinkingData.tsx?8133","webpack://henrys-ecommerce/./src/themes/henrys/views/components/ProductBadge.tsx?d4d3","webpack://henrys-ecommerce/./src/themes/henrys/views/hei-buybox.view.tsx?471a","webpack://henrys-ecommerce/./lib/hei-buybox/module-registration.js?25c2","webpack://henrys-ecommerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://henrys-ecommerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://henrys-ecommerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["import { createObservableDataAction, ICreateActionContext, IAction } from '@msdyn365-commerce/core';\r\nimport {\r\n IDimensionForSelectedVariant,\r\n getDimensionsForSelectedVariantAction,\r\n getSelectedProductIdFromActionInput,\r\n GetDimensionsForSelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nclass GetAllDimensionsForProductInput extends GetDimensionsForSelectedVariantInput {\r\n constructor(productId: number, channelId: number) {\r\n super(productId, channelId, []);\r\n }\r\n\r\n public getCacheObjectType = () => 'HEI-AllDimensionsForProduct';\r\n}\r\n\r\nconst createAllDimensionsForProductInput = (inputData: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log('hei-get-all-dimensions-for-product', 'createAllDimensionsForProductInput', productId, inputData);\r\n\r\n if (productId) {\r\n return new GetAllDimensionsForProductInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n }\r\n\r\n throw new Error('Unable to create AllDimensionsForProductInput, no productId found on module config or query');\r\n};\r\n\r\nexport const getAllDimensionsForProductActionDataAction = createObservableDataAction({\r\n id: 'hei-get-all-dimensions-for-product',\r\n action: >getDimensionsForSelectedVariantAction,\r\n input: createAllDimensionsForProductInput\r\n});\r\n\r\nexport default getAllDimensionsForProductActionDataAction;\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","import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { createObservableDataAction, IAction, IActionContext } from '@msdyn365-commerce/core';\r\nimport { ProductsDataActions, WarrantyGroup, ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSelectedProductIdFromActionInput, getDimensionValuesFromQuery } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getProductVariantOrMaster } from './getProductVariantOrMaster';\r\n\r\nexport class getApplicableWarrantiesInput 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-ApplicableWarranties';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\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 getApplicableWarrantiesInput(+productId, matchingDimensionValues);\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\nexport async function getApplicableWarrantiesAction(\r\n input: getApplicableWarrantiesInput,\r\n context: IActionContext\r\n): Promise {\r\n const matchingDimensionValues = input.dimensionValues;\r\n const productVariantOrMaster = await getProductVariantOrMaster(input.recordId, matchingDimensionValues, context);\r\n\r\n const applicableWarranties = await ProductsDataActions.getApplicableWarrantiesAsync(\r\n { callerContext: context },\r\n context.requestContext.apiSettings.catalogId,\r\n [productVariantOrMaster.RecordId]\r\n );\r\n\r\n const warrantyGroup = applicableWarranties.find(aw => aw.WarrantableProductId === productVariantOrMaster.RecordId);\r\n return warrantyGroup?.WarrantyGroups;\r\n}\r\n\r\n/**\r\n * The complete createGetApplicableWarrantiesInput data action.\r\n */\r\nexport const getApplicableWarrantiesActionDataAction = createObservableDataAction({\r\n id: 'hei-get-applicable-warranties',\r\n action: >getApplicableWarrantiesAction,\r\n input: createInput\r\n});\r\n\r\nexport default getApplicableWarrantiesActionDataAction;\r\n","// base on @msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby\r\n\r\nimport { createObservableDataAction, IAction, ICreateActionContext, IGeneric, IAny, IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelDeliveryOption,\r\n DeliveryModeTypeFilter,\r\n ItemAvailability,\r\n OrgUnitAvailability,\r\n OrgUnitLocation,\r\n ProductWarehouseInventoryInformation,\r\n SearchArea,\r\n StoreHours,\r\n ProductsDataActions,\r\n OrgUnitsDataActions\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getDimensionValuesFromQuery,\r\n IFullOrgUnitAvailability,\r\n DeliveryMode,\r\n IProductInventoryInformation,\r\n QueryResultSettingsProxy,\r\n createInventoryAvailabilitySearchCriteria,\r\n mapProductInventoryInformation,\r\n GetFullAvailableInventoryNearbyInput,\r\n getFeatureState,\r\n createGetFeatureStateInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { GetProductPromotionsInput, getProductPromotionsAction } from './get-product-promotions.action';\r\n\r\nexport const mergeBonusProductInventoryInformation = (\r\n productInventoryInformation: IProductInventoryInformation[],\r\n productId: number,\r\n bonusItemIds: number[]\r\n) => {\r\n // Merge availabilities with bonus items\r\n if (bonusItemIds.length > 0) {\r\n const mergedProductInventoryInformation = productInventoryInformation\r\n .filter(p => p.ProductAvailableQuantity.ProductId === productId)\r\n .map(p => {\r\n productInventoryInformation\r\n .filter(\r\n bonusItemInv =>\r\n bonusItemInv.InventLocationId === p.InventLocationId &&\r\n bonusItemInv.ProductAvailableQuantity.ProductId !== productId\r\n )\r\n .forEach(bonusItemInv => {\r\n if (\r\n (bonusItemInv.ProductAvailableQuantity.AvailableQuantity ?? 0) === 0 &&\r\n (p.ProductAvailableQuantity.AvailableQuantity ?? 0) > 0\r\n ) {\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('getFullAvailableInventoryNearbyAction', 'missing bonus item', p, bonusItemInv);\r\n\r\n p.ProductAvailableQuantity.AvailableQuantity = bonusItemInv.ProductAvailableQuantity.AvailableQuantity;\r\n p.IsProductAvailable = false;\r\n p.StockLevelCode = bonusItemInv.StockLevelCode;\r\n p.StockLevelLabel = bonusItemInv.StockLevelLabel;\r\n }\r\n });\r\n return p;\r\n });\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', mergedProductInventoryInformation);\r\n return mergedProductInventoryInformation;\r\n }\r\n\r\n return productInventoryInformation;\r\n};\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns GetFullAvailableInventoryNearbyInput - The action input.\r\n */\r\nexport const createGetFullAvailableInventoryNearbyInput = (\r\n inputData: ICreateActionContext>\r\n): GetFullAvailableInventoryNearbyInput => {\r\n return new GetFullAvailableInventoryNearbyInput();\r\n};\r\n\r\n/**\r\n * Action method for the getSelectedVariant data aciton.\r\n * @param input - The action input class.\r\n * @param ctx - The action context.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nexport async function getFullAvailableInventoryNearbyAction(\r\n input: GetFullAvailableInventoryNearbyInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // No valid product we want to return undefined so module knows there are no results yet\r\n if (!input.productId) {\r\n return undefined;\r\n }\r\n\r\n if (((!input.radius && input.radius !== 0) || !input.latitude || !input.longitude) && !input.IgnoreLocation) {\r\n // No valid location we want to return empty array so module can show no locations message\r\n return [];\r\n }\r\n\r\n const searchArea: SearchArea = {\r\n Latitude: input.latitude,\r\n Longitude: input.longitude,\r\n Radius: input.radius,\r\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\r\n };\r\n\r\n const featureState = await getFeatureState(createGetFeatureStateInput({ requestContext: ctx.requestContext }), ctx);\r\n const retailMulitplePickupMFeatureState = featureState?.find(\r\n item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n )?.IsEnabled;\r\n\r\n const matchingDimensionValues = getDimensionValuesFromQuery(ctx.requestContext.url.requestUrl);\r\n const getProductPromotionsInput = new GetProductPromotionsInput(input.productId, matchingDimensionValues);\r\n const promotions = await getProductPromotionsAction(getProductPromotionsInput, ctx);\r\n const bonusItemIds = promotions.FreeItemProductIds ?? [];\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', bonusItemIds);\r\n\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [input.productId, ...bonusItemIds],\r\n false,\r\n true,\r\n searchArea,\r\n DeliveryMode.pickup\r\n );\r\n return ProductsDataActions.getEstimatedAvailabilityAsync({ callerContext: ctx }, searchCriteria)\r\n .then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\r\n // For store selector, inventory should always come from an individual store\r\n let productInventoryInformation = mapProductInventoryInformation(\r\n ctx,\r\n productWarehouseInformation.ProductWarehouseInventoryAvailabilities\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', productInventoryInformation);\r\n\r\n productInventoryInformation = mergeBonusProductInventoryInformation(\r\n productInventoryInformation,\r\n input.productId!,\r\n bonusItemIds\r\n );\r\n\r\n return OrgUnitsDataActions.getOrgUnitLocationsByAreaAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n searchArea,\r\n DeliveryModeTypeFilter.Pickup\r\n )\r\n .then(async (stores: OrgUnitLocation[]) => {\r\n // Constructing a store mapping based on the InventoryId.\r\n const storeMap = new Map();\r\n stores.forEach(store => {\r\n if (store.InventoryLocationId) {\r\n storeMap.set(store.InventoryLocationId, store);\r\n }\r\n });\r\n\r\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\r\n\r\n // If multiple pickup mode is enable then call getchanneldeliveryoption\r\n if (retailMulitplePickupMFeatureState) {\r\n const orgUnitChannel = stores.map(store => store.ChannelId);\r\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\r\n }\r\n\r\n const availabilityPromiseList = stores.map(store => {\r\n const locationDeliveryOption = locationDeliveryOptions?.find(\r\n _channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId\r\n );\r\n return _getAvailabilityWithHours(store, productInventoryInformation, storeMap, ctx, locationDeliveryOption);\r\n });\r\n\r\n return Promise.all(availabilityPromiseList);\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\r\n return [];\r\n });\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the store information along with store hours and product availability.\r\n * @param orgUnitLocation - The org unit location.\r\n * @param productInventoryInformation - The product inventory information.\r\n * @param storeMap - A map that contains store information group by the inventory location id.\r\n * @param ctx The action context.\r\n * @param channelDeleiveryOptions - The channel delivery options.\r\n * @returns IFullOrgUnitAvailability - The full org unit availability.\r\n */\r\nasync function _getAvailabilityWithHours(\r\n orgUnitLocation: OrgUnitLocation,\r\n productInventoryInformation: IProductInventoryInformation[],\r\n storeMap: Map,\r\n ctx: IActionContext,\r\n channelDeleiveryOptions: ChannelDeliveryOption | undefined\r\n): Promise {\r\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\r\n return { OrgUnitAvailability: undefined };\r\n }\r\n\r\n return OrgUnitsDataActions.getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\r\n .then((hours: StoreHours) => {\r\n const itemAvailabilities: ItemAvailability[] = [];\r\n if (productInventoryInformation && storeMap) {\r\n productInventoryInformation.forEach(element => {\r\n if (\r\n element.InventLocationId &&\r\n storeMap.has(element.InventLocationId) &&\r\n element.InventLocationId === orgUnitLocation.InventoryLocationId\r\n ) {\r\n itemAvailabilities.push({ AvailableQuantity: element.ProductAvailableQuantity?.AvailableQuantity });\r\n }\r\n });\r\n }\r\n\r\n const availability: OrgUnitAvailability = {\r\n OrgUnitLocation: orgUnitLocation,\r\n ItemAvailabilities: itemAvailabilities\r\n };\r\n\r\n if (hours && !(hours instanceof Error)) {\r\n return {\r\n OrgUnitAvailability: availability,\r\n StoreHours: hours,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n }\r\n\r\n return {\r\n OrgUnitAvailability: availability,\r\n ProductInventoryInformation: productInventoryInformation,\r\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions\r\n };\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n return { OrgUnitAvailability: {} };\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the channel delivery option information.\r\n * @param channelCollection - The org unit channel Id list.\r\n * @param ctx - The action context.\r\n * @returns ChannelDeliveryOption - The channel delivery option collection.\r\n */\r\nasync function _getLocationPickUpDeliveryModes(\r\n channelCollection: (number | undefined)[],\r\n ctx: IActionContext\r\n): Promise {\r\n if (channelCollection?.length === 0 || channelCollection === undefined) {\r\n return undefined;\r\n }\r\n\r\n const channelIdList: number[] = [];\r\n channelCollection?.forEach(id => {\r\n if (id !== undefined) {\r\n channelIdList.push(id);\r\n }\r\n });\r\n\r\n // To get all channel pickup delivery mode filterOption should be 4\r\n return OrgUnitsDataActions.getChannelDeliveryOptionsAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n channelIdList,\r\n 4\r\n )\r\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\r\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\r\n return channelDeliveryOptions;\r\n }\r\n\r\n return undefined;\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * The complete getFullAvailableInventoryNearby data action.\r\n */\r\nexport const getFullAvailableInventoryNearbyActionDataAction = createObservableDataAction({\r\n id: 'hei-get-full-available-inventory-nearby',\r\n action: >getFullAvailableInventoryNearbyAction,\r\n input: createGetFullAvailableInventoryNearbyInput\r\n});\r\n\r\nexport default getFullAvailableInventoryNearbyActionDataAction;\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 {\r\n getSelectedProductIdFromActionInput,\r\n getDimensionValuesFromQuery,\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 retailAction\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IGetProductPromotionResponse } from './DataServiceEntities.g';\r\nimport { getProductPromotionsV2Input } from './DataActionExtension.g';\r\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\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 => 'application';\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 GetProductInfoInput, no productId found on module config or query');\r\n }\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\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\nexport async function getProductPromotionsAction(\r\n input: GetProductPromotionsInput,\r\n context: Msdyn365.IActionContext\r\n): Promise {\r\n const matchingDimensionValues = input.dimensionValues;\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 [input.recordId],\r\n null,\r\n context.requestContext.apiSettings.catalogId\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 const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\r\n\r\n const newImageUrl = generateProductImageUrl(product, context.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n product.PrimaryImageUrl = newImageUrl;\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 // Update dimension value back to the one that comes from API since the URL query might have a different format for the dimension values.\r\n if (productVariant?.Dimensions && product.Dimensions) {\r\n for (const dimension of product.Dimensions) {\r\n const matchedTargetDimensionFromApi = productVariant.Dimensions.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n const matchedTargetDimensionFromSearch = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimensionFromSearch && matchedTargetDimensionFromApi) {\r\n dimension.DimensionValue = matchedTargetDimensionFromApi.DimensionValue;\r\n }\r\n }\r\n }\r\n\r\n let distinctProductVariantId = input.recordId;\r\n if (!hasUnmatchedDimension && ArrayExtensions.hasElements(matchingDimensionValues) && productVariant) {\r\n distinctProductVariantId = productVariant.RecordId;\r\n }\r\n\r\n var 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 React from 'react';\r\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\r\nimport { GaPayload, pushGoogleAnalyticsEvent } from './pushGoogleAnalyticsEvent';\r\n\r\nlet lastCached = '';\r\n\r\nconst useGoogleAnalytics = (payload?: GaPayload, actionContext?: IActionContext, deps?: React.DependencyList | undefined) => {\r\n const isBrowser = MsDyn365.isBrowser;\r\n\r\n const cacheKey = React.useMemo(() => {\r\n if (payload?.event === 'view_item' && payload.ecommerce?.items) {\r\n return payload.ecommerce?.items[0]?.item_id;\r\n } else if (payload?.event === 'purchase') {\r\n return payload.ecommerce?.transaction_id;\r\n } else if (payload?.event === 'begin_checkout' && payload.ecommerce?.items) {\r\n return payload.ecommerce?.items.map(i => i.item_id).join(',');\r\n }\r\n\r\n return '';\r\n }, [payload]);\r\n\r\n if (cacheKey) {\r\n // skip if the event is unrecognized\r\n lastCached = cacheKey;\r\n }\r\n\r\n process.env.NODE_ENV === 'development' && console.log('useGoogleAnalytics', 'cacheKey', cacheKey);\r\n\r\n React.useEffect(() => {\r\n if (isBrowser) {\r\n void pushGoogleAnalyticsEvent(payload, actionContext);\r\n }\r\n }, [isBrowser, cacheKey || lastCached, ...(deps ?? [])]);\r\n};\r\n\r\nexport { useGoogleAnalytics };\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\n\r\nexport const createCanonicalUrl = (context: IActionContext, paths: string[], page: string) => {\r\n let canonicalDomainHost = `https://${context.requestContext.canonicalDomain}`;\r\n if (process.env.NODE_ENV === 'development') {\r\n canonicalDomainHost = '';\r\n }\r\n\r\n const sitePath = context.requestContext.sitePath ?? '';\r\n\r\n const url = `${canonicalDomainHost}${sitePath}/${paths\r\n .map(p => toSlug(p))\r\n .filter(s => s.length > 0)\r\n .join('/')}/${page}`;\r\n return url;\r\n};\r\n\r\nconst toSlug = (text: string) => {\r\n const slug = text\r\n .toLowerCase()\r\n .replace(/[^A-Za-z\\u00C0-\\u017F0-9]/g, '-')\r\n .replace(/--+/g, '-')\r\n .replace(/^-/, '')\r\n .replace(/-$/, '');\r\n\r\n return slug;\r\n};\r\n","import { getPayloadObject, getTelemetryAttributes } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IDropdownItemProps, IDropdownProps, IDropdownOnSelectionChangeNotification } from '@msdyn365-commerce-modules/buybox';\r\nimport classnames from 'classnames';\r\n\r\nexport type IDropdownExtItemProps = IDropdownItemProps & { isValid?: boolean };\r\nexport type IDropdownExtOnSelectionChangeNotification = IDropdownOnSelectionChangeNotification & { isValid?: boolean };\r\n\r\nexport type IDropdownExtProps = Omit & {\r\n defaultFirstOption?: boolean;\r\n dropdownList: IDropdownExtItemProps[];\r\n onChange?(notification: IDropdownExtOnSelectionChangeNotification): Promise;\r\n};\r\n\r\nconst RadioButtonList = (props: IDropdownExtProps) => {\r\n const { telemetryContent, dropdownList, dropdownName, onChange, dropdownId, defaultFirstOption } = props;\r\n\r\n let selectedItem = dropdownList.find(item => item.isDefault);\r\n const [selectedId, setSelectedId] = React.useState(selectedItem?.id ?? '');\r\n\r\n const payLoad = React.useMemo(() => {\r\n return getPayloadObject('click', telemetryContent!, dropdownName);\r\n }, [telemetryContent, dropdownName]);\r\n\r\n const handleOnChange = React.useCallback(\r\n (item: IDropdownExtItemProps) => {\r\n setSelectedId(currentSelectedId => {\r\n if (currentSelectedId !== item.id) {\r\n if (onChange) {\r\n process.env.NODE_ENV === 'development' && console.log('RadioButtonList', 'handleOnChange', currentSelectedId, item);\r\n\r\n void onChange({\r\n dropdownId: dropdownId,\r\n isValid: item.isValid,\r\n selectId: item.id,\r\n selectedValue: item.value\r\n });\r\n }\r\n\r\n return item.id;\r\n }\r\n\r\n return currentSelectedId;\r\n });\r\n },\r\n [onChange, dropdownId, setSelectedId]\r\n );\r\n\r\n if (!selectedItem && defaultFirstOption) {\r\n selectedItem = dropdownList.find(i => i.isValid);\r\n process.env.NODE_ENV === 'development' && console.log('RadioButtonList', 'defaultFirstOption', selectedItem);\r\n }\r\n\r\n React.useEffect(() => {\r\n if (selectedItem && !selectedItem.isDefault) {\r\n void handleOnChange({\r\n id: selectedItem.id,\r\n isValid: selectedItem.isValid || false,\r\n value: selectedItem.value\r\n });\r\n }\r\n }, [selectedItem]);\r\n\r\n if (dropdownList.length === 0 && console?.warn) {\r\n console.warn(`No option for ${dropdownName}`);\r\n }\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n
\r\n {dropdownList.map(item => (\r\n \r\n handleOnChange(item)}\r\n />\r\n {item.value}\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport { RadioButtonList };\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 { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { ProductDimension, ProductDimensionType } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n convertProductDimensionTypeToDimensionTypes,\r\n DimensionTypes,\r\n getDimensionValuesFromQuery,\r\n getInventoryLevelCodeFromDimensionValue,\r\n IDimensionForSelectedVariant,\r\n IDimensionsApp,\r\n IDimensionValueForSelectedVariant,\r\n InventoryLevelValues,\r\n ObjectExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, getTelemetryObject, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IBuyboxCallbacks,\r\n IBuyboxCommonData,\r\n IBuyboxCommonResources,\r\n IBuyboxExtentedProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxState,\r\n IProductDetails\r\n} from '@msdyn365-commerce-modules/buybox';\r\n// eslint-disable-next-line no-duplicate-imports\r\nimport { Dropdown, IDropdownItemProps, IDropdownOnSelectionChangeNotification, SelectionType } from '@msdyn365-commerce-modules/buybox';\r\nimport { RadioButtonList, IDropdownExtOnSelectionChangeNotification } from './radio-button-list';\r\n\r\nlet telemetryContent: ITelemetryContent;\r\n\r\n/**\r\n * Dimension pre-processing info.\r\n */\r\ninterface IProductDimensionInfo {\r\n dropdownName: string;\r\n dropdownId: string;\r\n dropdownList: IDropdownItemProps[];\r\n}\r\n\r\n/**\r\n * Props for rendering a dropdown.\r\n */\r\ninterface IProductDimensionDropdownProps extends IProductDimensionInfo {\r\n resources: IBuyboxCommonResources;\r\n className: string;\r\n context: ICoreContext;\r\n\r\n configureErrors: { [configureId: string]: string | undefined };\r\n\r\n getDropdownName(dimensionType: number, resources: IBuyboxCommonResources): string;\r\n dropdownCallback(notification: IDropdownOnSelectionChangeNotification): Promise;\r\n\r\n defaultFirstOption: boolean;\r\n}\r\n\r\nconst mapProductDimensionFullToDropdownViewProps = (props: IProductDimensionDropdownProps): IBuyboxProductConfigureDropdownViewProps => {\r\n const dimensionId = Number.parseInt(props.dropdownId, 10) as ProductDimensionType;\r\n const dropdownToggleName = format(props.resources.selectDimensionFormatString, props.dropdownName);\r\n\r\n const errorMessage = props.configureErrors[props.dropdownId];\r\n\r\n let dimensionSelectionType = SelectionType.dropdown;\r\n\r\n const dimensionType = convertProductDimensionTypeToDimensionTypes(dimensionId);\r\n\r\n const dimensionsAsSwatchConfiguration = props.context.app.config.dimensionsAsSwatchType;\r\n if (\r\n ArrayExtensions.hasElements(dimensionsAsSwatchConfiguration) &&\r\n !dimensionsAsSwatchConfiguration.includes(DimensionTypes.none) &&\r\n dimensionsAsSwatchConfiguration.includes(dimensionType)\r\n ) {\r\n dimensionSelectionType = SelectionType.swatch;\r\n }\r\n\r\n const isHidden =\r\n props.defaultFirstOption &&\r\n dimensionType === DimensionTypes.size &&\r\n props.dropdownList.length === 1 &&\r\n props.dropdownList[0].value?.toLocaleLowerCase() === 'n/a';\r\n const hiddenClass = isHidden ? 'd-none' : '';\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${props.className}__dropdown ${hiddenClass}`\r\n },\r\n LabelContainerProps: {\r\n tag: 'label',\r\n className: `${props.className}__dropdown-quantity-label`,\r\n htmlFor: `${props.className}__dropown-quantity-input-${props.dropdownId}`\r\n },\r\n errors: errorMessage && (\r\n \r\n \r\n ),\r\n heading:
{props.dropdownName}
,\r\n select:\r\n dimensionSelectionType === SelectionType.swatch ? (\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n};\r\n\r\nexport function getBuyboxProductConfigure(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n productDetails?: IProductDetails,\r\n selectedDimensions?: ProductDimension[],\r\n defaultFirstOption?: boolean,\r\n allDimensions?: IDimensionForSelectedVariant[] | null\r\n): IBuyboxProductConfigureViewProps | undefined {\r\n const { resources, typeName } = props;\r\n\r\n const {\r\n errorState: { configureErrors }\r\n } = state;\r\n\r\n const { getDropdownName } = callbacks;\r\n\r\n const context = props.context as ICoreContext;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ? props.data.product.result : productDetails?.product;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const productDimensionsData = props.data.productDimensions?.result ?? productDetails?.productDimensions;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = props.context.app.config.enableStockCheck;\r\n\r\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensionsData);\r\n\r\n if (!product || !hasProductDimensions) {\r\n return undefined;\r\n }\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n telemetryContent = getTelemetryObject(context.request.telemetryPageName!, props.typeName, props.telemetry);\r\n\r\n const inventoryLevel = context.app.config.inventoryLevel;\r\n\r\n let dimensionsInfo: IProductDimensionInfo[] = [];\r\n\r\n const productDimensions = allDimensions || (productDimensionsData as IDimensionForSelectedVariant[]);\r\n\r\n const onChanged = async (notification: IDropdownExtOnSelectionChangeNotification) => {\r\n // user selected an options that's not available with other selected options\r\n const otherDimensions: { [id: number]: string } = {};\r\n if (!notification.isValid) {\r\n process.env.NODE_ENV === 'development' && console.log('buybox-product-configure', 'invalid option selected', notification);\r\n const productDimension = productDimensions.find(pd => pd.DimensionTypeValue.toString() === notification.dropdownId);\r\n const dimensionValuesWithInventory = productDimension!.dimensionValuesWithInventory!.find(\r\n dv => dv.DimensionValue?.Value === notification.selectedValue\r\n );\r\n\r\n if (dimensionValuesWithInventory) {\r\n const targetProductId = dimensionValuesWithInventory.ProductIds![0];\r\n\r\n for (const productDimensionFull of productDimensions) {\r\n if (productDimensionFull.DimensionTypeValue.toString() !== notification.dropdownId) {\r\n for (const dv of productDimensionFull.dimensionValuesWithInventory || []) {\r\n if (dv.ProductIds?.find(id => id === targetProductId)) {\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('buybox-product-configure', 'update option', dv.DimensionValue?.Value?.toString());\r\n\r\n otherDimensions[dv.DimensionTypeValue!] = dv.DimensionValue!.RecordId.toString();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n await _onChanged(notification, callbacks.dimensionSelectedAsync, otherDimensions);\r\n };\r\n\r\n const matchedDimensions = selectedDimensions ?? getDimensionValuesFromQuery(context.request.url.requestUrl);\r\n\r\n const validDimensionIds = {};\r\n for (const productDimensionFull of productDimensions) {\r\n const selectedOtherDimensions = matchedDimensions.filter(md => md.DimensionTypeValue !== productDimensionFull.DimensionTypeValue);\r\n\r\n const dimensionValuesWithInventory = productDimensionFull.dimensionValuesWithInventory;\r\n if (dimensionValuesWithInventory) {\r\n for (const dv of dimensionValuesWithInventory) {\r\n let matchFound = selectedOtherDimensions.length === 0; // allow any option when none is selected\r\n if (!matchFound) {\r\n const productIds = dv.ProductIds || [];\r\n for (const productId of productIds) {\r\n if (!matchFound) {\r\n for (const currentDimension of selectedOtherDimensions) {\r\n if (!matchFound) {\r\n const currentDimensionInv =\r\n productDimensions.find(pd => pd.DimensionTypeValue === currentDimension.DimensionTypeValue)\r\n ?.dimensionValuesWithInventory || [];\r\n const cdi = currentDimensionInv.find(\r\n v =>\r\n v.DimensionValue?.Value?.toLowerCase() === currentDimension.DimensionValue?.Value?.toLowerCase()\r\n );\r\n\r\n if ((cdi?.ProductIds || []).find(val => val === productId)) {\r\n matchFound = true;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (matchFound && dv.DimensionValue) {\r\n validDimensionIds[dv.DimensionValue.RecordId] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n dimensionsInfo = productDimensions.map(productDimensionFull => {\r\n const dropdownName = getDropdownName(productDimensionFull.DimensionTypeValue, resources);\r\n const dropdownId = productDimensionFull.DimensionTypeValue.toString();\r\n\r\n const dimensions = (productDimensionFull.dimensionValuesWithInventory ??\r\n productDimensionFull.DimensionValues ??\r\n []) as IDimensionValueForSelectedVariant[];\r\n const validProductDimensionsFull = dimensions.filter(\r\n value => !ObjectExtensions.isNullOrUndefined(value.DimensionValue?.RecordId ?? value.RecordId)\r\n );\r\n\r\n const dropdownList: IDropdownItemProps[] = validProductDimensionsFull.map(dimensionValuesWithInventory => {\r\n const dimensionValue = dimensionValuesWithInventory.DimensionValue ?? dimensionValuesWithInventory;\r\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(dimensionValuesWithInventory, inventoryLevel);\r\n\r\n const isValid = !!validDimensionIds[dimensionValue.RecordId];\r\n const item = {\r\n value: dimensionValue.Value ?? '',\r\n id: dimensionValue.RecordId.toString(),\r\n colorHexCode: dimensionValue.ColorHexCode,\r\n imageUrl: dimensionValue.ImageUrl,\r\n isValid: isValid,\r\n isDisabled: enableStockCheck && inventoryLevelCode === InventoryLevelValues.outOfStock\r\n };\r\n\r\n process.env.NODE_ENV === 'development' && !isValid && console.log('buybox-product-configure', 'dropdownList', item);\r\n\r\n return item;\r\n });\r\n\r\n return {\r\n dropdownName,\r\n dropdownId,\r\n dropdownList\r\n };\r\n });\r\n\r\n for (const dimensionInfo of dimensionsInfo) {\r\n const currentDimensionsFromQuery = matchedDimensions.filter(\r\n dimensionFromQuery => dimensionFromQuery.DimensionTypeValue.toString() === dimensionInfo.dropdownId\r\n );\r\n if (!ArrayExtensions.hasElements(currentDimensionsFromQuery)) {\r\n continue;\r\n }\r\n const currentDimensionFromQuery = currentDimensionsFromQuery[0];\r\n const selectedDimensionItem = dimensionInfo.dropdownList.filter(\r\n dimensionItem =>\r\n dimensionItem.value.toLocaleLowerCase() === currentDimensionFromQuery.DimensionValue?.Value?.toLocaleLowerCase()\r\n );\r\n if (!ArrayExtensions.hasElements(selectedDimensionItem)) {\r\n continue;\r\n }\r\n selectedDimensionItem[0].isDefault = true;\r\n }\r\n\r\n const dropdowns: IBuyboxProductConfigureDropdownViewProps[] = dimensionsInfo.map(dimensionInfo => {\r\n return mapProductDimensionFullToDropdownViewProps({\r\n ...dimensionInfo,\r\n resources,\r\n configureErrors,\r\n getDropdownName,\r\n dropdownCallback: onChanged,\r\n defaultFirstOption: defaultFirstOption || false,\r\n className,\r\n context\r\n });\r\n });\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__configure`\r\n },\r\n dropdowns\r\n };\r\n}\r\n\r\nconst _onChanged = async (\r\n notification: IDropdownOnSelectionChangeNotification,\r\n dimensionChanged: (newValue: number, selectedDimensionValue: string, otherDimensions?: { [id: number]: string }) => Promise,\r\n otherDimensions?: { [id: number]: string }\r\n): Promise => {\r\n await dimensionChanged(+notification.dropdownId, notification.selectId, otherDimensions);\r\n};\r\n\r\nconst _getClassNamePrefix = (typeName: string): string => {\r\n return typeName.toLocaleLowerCase() === 'quickview' ? 'ms-quickView' : 'ms-buybox';\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n AddToCartBehavior,\r\n IAddToCartFailureResult,\r\n IAddToCartResources,\r\n ItemSuccessfullyAddedToCartNotification,\r\n PriceComponent\r\n} from '@msdyn365-commerce/components';\r\nimport { getUrlSync, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n DeliveryOption,\r\n FeatureState,\r\n OrgUnitLocation,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductsDataActions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport {\r\n ArrayExtensions,\r\n DeliveryMode,\r\n IProductInventoryInformation,\r\n isAggregatedInventory\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { BuyboxErrorBlock } from '@msdyn365-commerce-modules/buybox';\r\nimport { IBuyboxCallbacks } from '@msdyn365-commerce-modules/buybox';\r\nimport { getConfigureErrors, getGenericError } from '@msdyn365-commerce-modules/buybox';\r\nimport { IHeiBuyboxData, IHeiBuyboxState } from '../hei-buybox.data';\r\nimport { IHeiBuyboxProps, IHeiBuyboxResources } from '../hei-buybox.props.autogenerated';\r\nimport { sendGoogleAnalyticsEvent } from '../../../common/sendGoogleAnalyticsEvent';\r\nimport { getBonusItemsForAddToCart } from './add-to-cart.component';\r\nimport Popup, { IPopupProps } from './Popup';\r\nimport { getLineIdFromExtProps } from '../../cart/components/cart-pick-up-in-store';\r\n\r\nconst modalCloseButtonReference: React.RefObject = React.createRef();\r\n\r\n/**\r\n * FindinStore failure Interface.\r\n */\r\nexport interface IFindInStoreFailureResult {\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\ninterface IAddCartLine {\r\n product: SimpleProduct;\r\n count?: number;\r\n location?: OrgUnitLocation;\r\n additionalProperties?: object;\r\n availableQuantity?: number;\r\n enableStockCheck?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPrice?: number;\r\n deliveryMode?: string;\r\n shouldSkipSiteSettings?: boolean;\r\n}\r\n\r\n/**\r\n * BuyBoxFindinStore View Props Interface.\r\n */\r\nexport interface IBuyboxFindInStoreViewProps {\r\n storeSelector?: React.ReactNode;\r\n heading?: React.ReactNode;\r\n description?: React.ReactNode;\r\n errors?: React.ReactNode;\r\n button?: React.ReactNode;\r\n productPickupOptionList?: React.ReactNode;\r\n\r\n modal?: React.ReactNode;\r\n\r\n ContainerProps: INodeProps;\r\n\r\n openFindInStoreDialog(): Promise;\r\n}\r\n\r\n/**\r\n * On click find store handler.\r\n * @param props -Buybox data.\r\n * @param state -Buybox state.\r\n * @param callbacks -Buybox callbacks.\r\n * @returns Find in store.\r\n */\r\nconst onClickFindInStoreHandler = (\r\n props: IHeiBuyboxProps,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n) => async () => {\r\n await findInStoreOnClick(props, state, callbacks);\r\n};\r\n\r\n/**\r\n * Inventory settings based on the inventory policy for aggregated availability.\r\n */\r\ninterface IInventorySettingsProps {\r\n isSectionDisabled: boolean;\r\n description: string;\r\n buttonText: string;\r\n}\r\n\r\n/**\r\n * The function defines the settings values for a given inventory configuration.\r\n * @param context - The context.\r\n * @param isStockCheck - Flag to enable inventory validation.\r\n * @param productAvailability - The product inventory information.\r\n * @param buyboxResources - The buybox string resources.\r\n * @param isLoading - Is loading.\r\n * @returns Boolean.\r\n */\r\nfunction getFindInStoreInventorySettings(\r\n context: ICoreContext,\r\n isStockCheck: boolean,\r\n productAvailability: IProductInventoryInformation[] | undefined,\r\n buyboxResources: IHeiBuyboxResources,\r\n isLoading?: boolean\r\n): IInventorySettingsProps {\r\n // If shouldValidateAggregation is true then is required to check for the product inventory, based on this the messaging will change\r\n // and the find in store button will be ensbled or disabled\r\n\r\n let isSectionDisabled: boolean;\r\n let buttonText;\r\n let description: string;\r\n\r\n let pickupInventory: IProductInventoryInformation | undefined;\r\n\r\n if (!isStockCheck || isLoading) {\r\n return {\r\n isSectionDisabled: false,\r\n buttonText: buyboxResources.findInStoreLinkText,\r\n description: buyboxResources.findInStoreDescriptionText\r\n };\r\n }\r\n\r\n if (productAvailability) {\r\n pickupInventory = productAvailability.find(pickup => pickup.deliveryType === DeliveryMode.pickup);\r\n }\r\n\r\n // If aggregated is enabled, then we need to validate the inventor check for find in store.\r\n // If an individual is selected, then we will always show a find in store button.\r\n if (isAggregatedInventory(context.actionContext)) {\r\n if (productAvailability && pickupInventory?.IsProductAvailable) {\r\n isSectionDisabled = false;\r\n buttonText = buyboxResources.findInStoreLinkText;\r\n description = buyboxResources.findInStoreDescriptionText;\r\n } else {\r\n isSectionDisabled = true;\r\n buttonText = buyboxResources.findInStoreNotAvailableTextButton;\r\n description = buyboxResources.findInStoreNotAvailableDescription;\r\n }\r\n } else {\r\n isSectionDisabled = false;\r\n buttonText = buyboxResources.findInStoreLinkText;\r\n description = buyboxResources.findInStoreDescriptionText;\r\n }\r\n\r\n return {\r\n isSectionDisabled,\r\n description,\r\n buttonText\r\n };\r\n}\r\n\r\n/**\r\n * Method to check if we have atleast one common delivery code between product and channel.\r\n * @param productdeliveryOptions - Product DeliveryOption List.\r\n * @param storePickUpOptionList - Channel DeliveryOption List.\r\n * @returns Boolean flag.\r\n */\r\nconst matchDeliveryOptions = (\r\n productdeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: string[] | undefined\r\n): boolean => {\r\n const deliveryOption: string[] = [];\r\n productdeliveryOptions?.map(delivery => {\r\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\r\n if (pickup) {\r\n deliveryOption.push(pickup);\r\n }\r\n return deliveryOption;\r\n });\r\n\r\n return ArrayExtensions.hasElements(deliveryOption);\r\n};\r\n\r\nconst PopupComponent = (props: {\r\n buyBoxProps: IHeiBuyboxProps;\r\n buyBoxState: IHeiBuyboxState;\r\n callbacks: IBuyboxCallbacks;\r\n}) => {\r\n const { buyBoxProps, buyBoxState, callbacks } = props;\r\n const {\r\n data,\r\n resources: {\r\n priceFree,\r\n originalPriceText,\r\n currentPriceText,\r\n buyBoxGoToCartText,\r\n buyBoxContinueShoppingText,\r\n closeNotificationLabel,\r\n buyBoxSingleItemText,\r\n buyBoxMultiLineItemFormatText,\r\n buyBoxHeaderMessageText\r\n }\r\n } = buyBoxProps;\r\n const { modalOpen, quantity } = buyBoxState;\r\n\r\n const [bonusProducts, setBonusProducts] = React.useState();\r\n const bonusProductIds = data.productPromotions.result?.FreeItemProductIds;\r\n React.useEffect(() => {\r\n if (bonusProductIds) {\r\n void ProductsDataActions.getByIdsAsync(\r\n { callerContext: buyBoxProps.context.actionContext },\r\n buyBoxProps.context.request.apiSettings.channelId,\r\n bonusProductIds\r\n ).then(resp => setBonusProducts(resp || []));\r\n } else {\r\n setBonusProducts([]);\r\n }\r\n }, [bonusProductIds]);\r\n\r\n if (!bonusProducts) {\r\n return null;\r\n }\r\n\r\n const price = data?.productPrice?.result;\r\n\r\n const dialogStrings = {\r\n goToCartText: buyBoxGoToCartText,\r\n continueShoppingText: buyBoxContinueShoppingText,\r\n closeNotificationLabel,\r\n headerItemOneText: buyBoxSingleItemText,\r\n headerItemFormatText: buyBoxMultiLineItemFormatText,\r\n headerMessageText: buyBoxHeaderMessageText,\r\n freePriceText: priceFree,\r\n originalPriceText,\r\n currentPriceText\r\n };\r\n\r\n const priceComponent = price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const popupProps: IPopupProps = {\r\n context: buyBoxProps.context,\r\n className: 'ms-buybox',\r\n id: buyBoxProps.id,\r\n typeName: buyBoxProps.typeName,\r\n data: { product: data.product?.result, price: data.productPrice?.result, bonusProducts: bonusProducts },\r\n dialogStrings,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: buyBoxProps.context.request.gridSettings,\r\n productQuantity: quantity,\r\n priceComponent,\r\n navigationUrl: getUrlSync('cart', buyBoxProps.context.actionContext),\r\n modalOpen,\r\n setModalOpen: callbacks.changeModalOpen\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport function getBuyboxFindInStore(\r\n props: IHeiBuyboxProps,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): IBuyboxFindInStoreViewProps | undefined {\r\n const {\r\n data,\r\n slots: { storeSelector },\r\n resources: { findInStoreHeaderText },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n }\r\n } = props;\r\n\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const product = data?.product?.result;\r\n const storeSelectorStateManager = data?.storeSelectorStateManager?.result;\r\n const cart = data?.cart?.result;\r\n const deliveryOptions = data?.deliveryOptions?.result;\r\n const productAvailability = data.productAvailableQuantity?.result;\r\n const retailMulitplePickupMFeatureState = data?.featureState?.result?.find(\r\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n const channelDeliveryOptionConfig = data?.channelDeliveryOptionConfig?.result;\r\n\r\n const missingDimensions = product?.Dimensions?.filter(dimension => !dimension.DimensionValue?.Value);\r\n\r\n const {\r\n errorState: { configureErrors, quantityError, otherError, errorHost }\r\n } = state;\r\n\r\n const { isSectionDisabled, buttonText, description } = getFindInStoreInventorySettings(\r\n props.context,\r\n props.context.app.config.enableStockCheck,\r\n productAvailability,\r\n props.resources,\r\n props.data.productAvailableQuantity.status === 'LOADING' || ArrayExtensions.hasElements(missingDimensions)\r\n );\r\n\r\n if (!product || !storeSelectorStateManager || !ArrayExtensions.hasElements(storeSelector)) {\r\n return undefined;\r\n }\r\n\r\n if (!deliveryOptions || !deliveryOptions.DeliveryOptions) {\r\n return undefined;\r\n }\r\n\r\n // If no delivery options present on the product, or none of the delivery options\r\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n if (retailMulitplePickupMFeatureState && channelDeliveryOptionConfig) {\r\n if (!matchDeliveryOptions(deliveryOptions.DeliveryOptions, channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\r\n return undefined;\r\n }\r\n } else if (\r\n !PickupDeliveryModeCode ||\r\n !deliveryOptions.DeliveryOptions.find((option: DeliveryOption) => option.Code === PickupDeliveryModeCode)\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n ContainerProps: {\r\n className: 'ms-buybox__find-in-store'\r\n },\r\n\r\n storeSelector: storeSelector[0],\r\n\r\n openFindInStoreDialog: onClickFindInStoreHandler(props, state, callbacks),\r\n\r\n heading: ,\r\n\r\n description:

{description}

,\r\n productPickupOptionList: null,\r\n errors: (\r\n \r\n ),\r\n\r\n button: (\r\n \r\n {buttonText}\r\n \r\n ),\r\n\r\n modal: \r\n };\r\n}\r\n\r\n/**\r\n * Handler for find in store button.\r\n * @param props - BuyBox data.\r\n * @param state - BuyBox state.\r\n * @param callbacks - BuyBox callbacks.\r\n * @returns - Promise.\r\n */\r\nasync function findInStoreOnClick(\r\n props: IHeiBuyboxProps,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): Promise {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n cart: { result: cart },\r\n productAvailableQuantity: { result: productAvailableQuantity }\r\n },\r\n resources,\r\n context,\r\n modules\r\n } = props;\r\n\r\n const { selectedProduct, quantity } = state;\r\n\r\n let dataProduct = props.data.product.result;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const retailMulitplePickupMFeatureState = props.data?.featureState?.result?.find(\r\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n if (selectedProduct) {\r\n dataProduct = (await selectedProduct) || dataProduct;\r\n }\r\n\r\n if (!dataProduct || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const product = dataProduct;\r\n\r\n const missingDimensions =\r\n product.Dimensions &&\r\n product.Dimensions.filter((dimension: ProductDimension) => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n\r\n if (missingDimensions && missingDimensions.length > 0) {\r\n if (callbacks.updateErrorState) {\r\n callbacks.updateErrorState({\r\n errorHost: 'FINDINSTORE',\r\n configureErrors: getConfigureErrors(missingDimensions, resources)\r\n });\r\n }\r\n } else {\r\n storeSelectorStateManager\r\n .openDialog({\r\n product,\r\n id: storeSelectorId,\r\n parentElementRef: modalCloseButtonReference,\r\n deliveryOptions: retailMulitplePickupMFeatureState ? props.data.deliveryOptions.result : undefined,\r\n onLocationSelected: async (orgUnitLocation: OrgUnitLocation, deliveryMode: string) => {\r\n if (!cart) {\r\n return Promise.resolve();\r\n }\r\n\r\n const productsToAdd: IAddCartLine[] = [];\r\n productsToAdd.push({\r\n product: product,\r\n count: quantity,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n location: orgUnitLocation,\r\n deliveryMode: deliveryMode\r\n });\r\n const behavior = props.context?.app?.config?.addToCartBehavior;\r\n if (state.selectedWarranty) {\r\n const warrantyProduct = state.selectedWarranty;\r\n productsToAdd.push({\r\n product: warrantyProduct,\r\n count: quantity,\r\n location: orgUnitLocation,\r\n additionalProperties: {\r\n warrantyProduct: product.RecordId\r\n },\r\n deliveryMode: deliveryMode\r\n });\r\n }\r\n\r\n // add bonus items\r\n const bonusItemIds = props.data.productPromotions.result?.FreeItemProductIds;\r\n if (bonusItemIds && bonusItemIds.length > 0) {\r\n const bonusItems = await getBonusItemsForAddToCart({\r\n context: props.context,\r\n bonusItemIds: bonusItemIds,\r\n quantity\r\n });\r\n\r\n for (const p of bonusItems) {\r\n productsToAdd.push({\r\n ...p,\r\n location: orgUnitLocation,\r\n deliveryMode: deliveryMode,\r\n additionalProperties: {\r\n isBonus: true\r\n }\r\n });\r\n }\r\n }\r\n\r\n const currentCartLinesCount = cart.cart.CartLines?.length ?? 0;\r\n return cart\r\n .addProductsToCart(productsToAdd)\r\n .then(async (result: ICartActionResult) => {\r\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\r\n callbacks.changeModalOpen(false);\r\n let productAvailability: ProductAvailableQuantity | undefined;\r\n if (state.productAvailableQuantity) {\r\n productAvailability = state.productAvailableQuantity.ProductAvailableQuantity;\r\n } else if (productAvailableQuantity && ArrayExtensions.hasElements(productAvailableQuantity)) {\r\n const shippingInventory = productAvailableQuantity.find(\r\n shipping => shipping.deliveryType === DeliveryMode.pickup\r\n );\r\n productAvailability = shippingInventory?.ProductAvailableQuantity;\r\n } else {\r\n productAvailability = undefined;\r\n }\r\n const failureResult: IAddToCartFailureResult = {\r\n failureReason: 'CARTACTIONFAILED',\r\n cartActionResult: { status: result.status, substatus: result.substatus }\r\n };\r\n callbacks.updateErrorState({\r\n errorHost: 'ADDTOCART',\r\n configureErrors: {},\r\n otherError: getGenericError(\r\n failureResult,\r\n cart,\r\n resources,\r\n context,\r\n product,\r\n productAvailability,\r\n orgUnitLocation\r\n )\r\n });\r\n } else {\r\n const cartLines = cart.cart.CartLines ?? [];\r\n const itemsAdded = cartLines.length - currentCartLinesCount;\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('BuyboxView', 'addProductsToCart', result, itemsAdded);\r\n\r\n if (itemsAdded > 1) {\r\n const productLine = cartLines[currentCartLinesCount];\r\n const updatedCartLinesObject: CartLine[] = [];\r\n\r\n // Link warranty if selected\r\n const warrantyLine = cartLines[currentCartLinesCount + 1];\r\n if (productLine && warrantyLine?.ProductId === state.selectedWarranty?.RecordId) {\r\n warrantyLine.WarrantableLineNumber = productLine.LineNumber;\r\n warrantyLine.IsWarrantyLine = true;\r\n\r\n const [productLineId, productLineUpdated] = getLineIdFromExtProps(productLine);\r\n\r\n if (!warrantyLine.ExtensionProperties) {\r\n warrantyLine.ExtensionProperties = [];\r\n }\r\n\r\n warrantyLine.ExtensionProperties.push({\r\n Key: 'warrantable-line-id',\r\n Value: {\r\n StringValue: productLineId\r\n }\r\n });\r\n\r\n updatedCartLinesObject.push(warrantyLine);\r\n if (productLineUpdated) {\r\n updatedCartLinesObject.push(productLine);\r\n }\r\n }\r\n\r\n // check if there's bonus item\r\n for (let idx = currentCartLinesCount + 1; idx < cartLines.length; idx++) {\r\n const bonusCartLine = cartLines[idx];\r\n if (!bonusCartLine.IsWarrantyLine) {\r\n if (!bonusCartLine.ExtensionProperties) {\r\n bonusCartLine.ExtensionProperties = [];\r\n }\r\n\r\n const [productLineId, productLineUpdated] = getLineIdFromExtProps(productLine);\r\n\r\n bonusCartLine.ExtensionProperties.push({\r\n Key: 'bonus-for-line-id',\r\n Value: {\r\n StringValue: productLineId\r\n }\r\n });\r\n\r\n updatedCartLinesObject.push(bonusCartLine);\r\n\r\n if (productLineUpdated) {\r\n updatedCartLinesObject.push(productLine);\r\n }\r\n }\r\n }\r\n\r\n if (updatedCartLinesObject.length > 0) {\r\n await cart.updateCartLines({ updatedCartLinesObject });\r\n }\r\n }\r\n\r\n await sendGoogleAnalyticsEvent(productsToAdd, props.context.actionContext);\r\n\r\n callbacks.updateErrorState({\r\n configureErrors: {}\r\n });\r\n const navigationUrl = getUrlSync('cart', context.actionContext);\r\n if (behavior === undefined || behavior === AddToCartBehavior.goToCart) {\r\n if (result.status === 'SUCCESS' && navigationUrl) {\r\n window.location.assign(navigationUrl);\r\n }\r\n } else if (behavior === AddToCartBehavior.showModal) {\r\n callbacks.changeModalOpen(true);\r\n } else if (behavior === AddToCartBehavior.showNotification) {\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n const telemetryContent = getTelemetryObject(\r\n props.context.request.telemetryPageName!,\r\n props.friendlyName,\r\n props.telemetry\r\n );\r\n const dialogStrings: IAddToCartResources = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n closeNotificationLabel: resources.closeNotificationLabel,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n addedQuantityText: resources.addedQuantityText\r\n };\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n dialogStrings,\r\n defaultImageSettings,\r\n props.context.request.gridSettings,\r\n product,\r\n props.data.productPrice?.result,\r\n productsToAdd.length === 2 ? quantity + 1 : quantity,\r\n navigationUrl,\r\n telemetryContent,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.exception(error);\r\n props.telemetry.debug('Unable to add product to cart');\r\n }\r\n });\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to find in store');\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 */\r\n\r\nimport {\r\n AddToOrderTemplateComponent,\r\n AddToWishlistComponent,\r\n IAddToCartFailureResult,\r\n IAddToCartResources,\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateActionErrorResult,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionErrorResult,\r\n PriceComponent,\r\n RatingComponent\r\n} from '@msdyn365-commerce/components';\r\nimport { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductAvailableQuantity, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, DeliveryMode, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Alert,\r\n Button,\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n Heading,\r\n ITelemetryContent,\r\n Node,\r\n Quantity,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxAddToOrderTemplateViewProps,\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonData,\r\n IBuyboxCommonResources,\r\n IBuyboxErrorBlockProps,\r\n IBuyboxExtentedProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxShopSimilarLookViewProps,\r\n IBuyboxState,\r\n IProductDetails,\r\n ShopSimiliarButtonType,\r\n getConfigureErrors,\r\n getGenericError,\r\n getQuantityError\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { AddToCartComponent } from '../components/add-to-cart.component';\r\nimport { IHeiBuyboxState } from '../hei-buybox.data';\r\n\r\nconst _getClassNamePrefix = (typeName: string): string => {\r\n return typeName.toLocaleLowerCase() === 'quickview' ? 'ms-quickView' : 'ms-buybox';\r\n};\r\n\r\nexport function getBuyBoxInventoryLabel(\r\n props: IBuyboxExtentedProps,\r\n productDetails?: IProductDetails\r\n): React.ReactElement | undefined {\r\n const { typeName } = props;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const productAvailableQuantity = props.data.productAvailableQuantity?.result ?? productDetails?.productAvailableQuantity;\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n if (!productAvailableQuantity || !ArrayExtensions.hasElements(productAvailableQuantity)) {\r\n return undefined;\r\n }\r\n const shippingInventory = productAvailableQuantity.find(shipping => shipping.deliveryType === DeliveryMode.shipping);\r\n\r\n if (shippingInventory) {\r\n let inventoryClassName: string;\r\n if (shippingInventory.StockLevelCode) {\r\n inventoryClassName = `${className}__inventory-label ${className}__inventory-code-${shippingInventory.StockLevelCode.toLowerCase()}`;\r\n } else {\r\n inventoryClassName = `${className}__inventory-label`;\r\n }\r\n return (\r\n
\r\n {shippingInventory.StockLevelLabel}\r\n
\r\n );\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getBuyboxProductTitle(\r\n props: IBuyboxExtentedProps,\r\n productDetails?: IProductDetails\r\n): React.ReactElement | undefined {\r\n const {\r\n config: { titleHeadingTag = 'h1' },\r\n typeName\r\n } = props;\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ?? productDetails?.product ?? undefined;\r\n\r\n return product && ;\r\n}\r\n\r\nexport function getBuyboxProductDescription(\r\n props: IBuyboxExtentedProps,\r\n productDetails?: IProductDetails\r\n): React.ReactElement | undefined {\r\n const { typeName } = props;\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ?? productDetails?.product ?? undefined;\r\n\r\n return product &&

{product.Description}

;\r\n}\r\n\r\n/**\r\n * Gets the react node for product unit of measure display.\r\n * @param {IBuyboxExtentedProps} props The buybox module props.\r\n * @param {IProductDetails} productDetails The product details to be displyed in buybox.\r\n * @returns {React.ReactElement} The node representing markup for unit of measure component.\r\n */\r\nexport function getBuyboxProductUnitOfMeasure(\r\n props: IBuyboxExtentedProps,\r\n productDetails?: IProductDetails\r\n): React.ReactElement | undefined {\r\n const { typeName } = props;\r\n const className = _getClassNamePrefix(typeName);\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (\r\n props.context.app.config &&\r\n (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none')\r\n ) {\r\n return undefined;\r\n }\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ?? productDetails?.product;\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n props.telemetry.warning('Missing defult unit of measureor theproduct');\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n {product.DefaultUnitOfMeasure}\r\n
\r\n );\r\n}\r\n\r\nlet telemetryContent: ITelemetryContent;\r\n\r\n/**\r\n * On add to cart failed function.\r\n * @param props -The buybox module props.\r\n * @param state -The buybox module state.\r\n * @param callbacks -The buybox module callbacks.\r\n * @param defaultMinimumKeyInPrice -The default minimum key in price.\r\n * @param defaultMaximumKeyInPrice -The default maximum key in price.\r\n * @param cart -The cart state.\r\n * @param product -The simple product.\r\n * @param productAvailability -The product available quantity.\r\n * @returns Update error state.\r\n */\r\nconst onAddToCartFailed = (\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n defaultMinimumKeyInPrice: number,\r\n defaultMaximumKeyInPrice: number,\r\n cart: ICartState,\r\n product: SimpleProduct,\r\n productAvailability: ProductAvailableQuantity | undefined\r\n) => (result: IAddToCartFailureResult) => {\r\n let quantityErrorForState: string | undefined;\r\n let customAmountErrorForState: string | undefined;\r\n let otherErrorForState: string | undefined = getGenericError(\r\n result,\r\n cart,\r\n props.resources,\r\n props.context,\r\n product,\r\n productAvailability,\r\n undefined\r\n );\r\n\r\n if (result.failureReason === 'OUTOFSTOCK') {\r\n quantityErrorForState = result.failureReason === 'OUTOFSTOCK' ? getQuantityError(result.stockLeft, props.resources) : undefined;\r\n } else if (\r\n result.failureReason === 'CARTACTIONFAILED' &&\r\n result.cartActionResult &&\r\n (result.cartActionResult.substatus === 'MAXQUANTITY' || result.cartActionResult.substatus === 'QUANTITYLIMITS')\r\n ) {\r\n quantityErrorForState = getGenericError(result, cart, props.resources, props.context, product, productAvailability, undefined);\r\n otherErrorForState = undefined; // Prevent error duplication in otherError and quantityError\r\n }\r\n\r\n if (result.failureReason === 'INVALIDCUSTOMAMOUNT') {\r\n if (state.keyInPriceAmount === undefined || state.keyInPriceAmount < (props.config.minimumKeyInPrice || defaultMinimumKeyInPrice)) {\r\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(\r\n props.config.minimumKeyInPrice || defaultMinimumKeyInPrice\r\n );\r\n customAmountErrorForState = props.resources.invalidSmallCustomAmountText.replace('{minAmount}', formatedAmountLimit);\r\n } else if (state.keyInPriceAmount > (props.config.maximumKeyInPrice || defaultMaximumKeyInPrice)) {\r\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(\r\n props.config.maximumKeyInPrice || defaultMaximumKeyInPrice\r\n );\r\n customAmountErrorForState = props.resources.invalidLargeCustomAmountText.replace('{maxAmount}', formatedAmountLimit);\r\n }\r\n }\r\n\r\n callbacks.updateErrorState({\r\n errorHost: 'ADDTOCART',\r\n quantityError: quantityErrorForState,\r\n configureErrors:\r\n result.failureReason === 'MISSINGDIMENSION'\r\n ? getConfigureErrors(result.missingDimensions, props.resources, product?.IsGiftCard)\r\n : {},\r\n customAmountError: customAmountErrorForState,\r\n otherError: otherErrorForState\r\n });\r\n};\r\n\r\n/**\r\n * On Item Add To Cart function.\r\n * @param typeName -Type name.\r\n * @param callbacks -Buybox Callbacks.\r\n * @returns Change modal open.\r\n */\r\nconst onItemAddedToCart = (typeName: string, callbacks: IBuyboxCallbacks) => (result: ICartActionResult) => {\r\n if (typeName === 'quickview') {\r\n callbacks.changeModalOpen(false);\r\n }\r\n};\r\n\r\nexport function getBuyboxAddToCart(\r\n props: IBuyboxExtentedProps,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n defaultMinimumKeyInPrice: number,\r\n defaultMaximumKeyInPrice: number,\r\n productDetails?: IProductDetails,\r\n bonusItemIds?: number[],\r\n hasAvailableProducts?: boolean\r\n): IBuyboxAddToCartViewProps {\r\n const { id, typeName, context, resources } = props;\r\n process.env.NODE_ENV === 'development' && console.log('BuyboxView', 'getBuyboxAddToCart', bonusItemIds);\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ?? productDetails?.product;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const cart = props.data.cart?.result ?? productDetails?.cart;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const productAvailableQuantity = props.data.productAvailableQuantity?.result ?? productDetails?.productAvailableQuantity;\r\n\r\n const {\r\n quantity,\r\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\r\n selectedProduct,\r\n isUpdatingDimension,\r\n isUpdatingDeliveryOptions,\r\n isServiceItem\r\n } = state;\r\n\r\n const productAvailability = state.productAvailableQuantity\r\n ? state.productAvailableQuantity.ProductAvailableQuantity\r\n : productAvailableQuantity && productAvailableQuantity.length > 0\r\n ? productAvailableQuantity[0].ProductAvailableQuantity\r\n : undefined;\r\n\r\n const dialogStrings: IAddToCartResources = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n closeNotificationLabel: resources.closeNotificationLabel,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n addedQuantityText: resources.addedQuantityText\r\n };\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const isProductQuantityLoading = typeName !== 'quickview' && props.data.productAvailableQuantity.status === 'LOADING';\r\n if (isProductQuantityLoading) {\r\n callbacks.changeUpdatingDimension(false);\r\n }\r\n\r\n const isLoadingDeliveryOptions = typeName !== 'quickview' && props.data.deliveryOptions?.status === 'LOADING';\r\n if (isLoadingDeliveryOptions && callbacks.changeUpdatingDeliveryOptions) {\r\n callbacks.changeUpdatingDeliveryOptions(false);\r\n }\r\n\r\n telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.typeName, props.telemetry);\r\n\r\n // Check if the product delivery mode is electronic\r\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\r\n // from quickview we are not getting deliveryoptions in props.data hence getting it from quickview state\r\n const deliveryOptions = typeName === 'quickview' ? state.productDeliveryOptions : props.data.deliveryOptions?.result;\r\n const isEmailDelivery =\r\n ArrayExtensions.hasElements(deliveryOptions?.DeliveryOptions) && deliveryOptions!.DeliveryOptions[0].Code === emailDeliveryModeCode;\r\n const className = _getClassNamePrefix(typeName);\r\n const isDisabled = isUpdatingDimension && typeName === 'quickview';\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__add-to-cart-container`\r\n },\r\n button: product && (\r\n \r\n ),\r\n errorBlock: (\r\n \r\n )\r\n };\r\n}\r\n\r\n/**\r\n * Get the React.ReactElement contains price.\r\n * @param props - The IBuyboxExtentedProps.\r\n * @param state - The buybox state.\r\n * @returns The React.ReactElement.\r\n */\r\nexport function getBuyboxProductPrice(props: IBuyboxExtentedProps, state: IBuyboxState): React.ReactElement | undefined {\r\n const { id, typeName, context, resources } = props;\r\n\r\n return (\r\n state.productPrice && (\r\n featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n )?.IsEnabled\r\n }\r\n isSalesAgreementPriceFeatureEnabled={\r\n props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSalesAgreementPriceSupportFeature'\r\n )?.IsEnabled\r\n }\r\n priceResources={{\r\n priceRangeSeparator: resources.priceRangeSeparator,\r\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\r\n salesAgreementExpirationDatePrompt: resources.salesAgreementExpirationDatePrompt,\r\n salesAgreementCommittedQuantityPrompt: resources.salesAgreementCommittedQuantityPrompt,\r\n salesAgreementRemainingQuantityPrompt: resources.salesAgreementRemainingQuantityPrompt\r\n }}\r\n freePriceText={resources.priceFree}\r\n originalPriceText={resources.originalPriceText}\r\n currentPriceText={resources.currentPriceText}\r\n />\r\n )\r\n );\r\n}\r\n\r\nexport function getBuyboxProductRating(\r\n props: IBuyboxExtentedProps,\r\n productDetails?: IProductDetails\r\n): React.ReactElement | undefined {\r\n const { id, typeName, context, resources } = props;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const ratingsSummary = props.data.ratingsSummary?.result ?? productDetails?.ratingsSummary;\r\n if (!ratingsSummary || !ratingsSummary.averageRating) {\r\n return
;\r\n }\r\n const ratingComponent = (\r\n \r\n );\r\n\r\n return ratingComponent;\r\n}\r\n\r\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n}\r\n\r\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n}\r\n\r\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources: IBuyboxCommonResources\r\n): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n}\r\n\r\n/**\r\n * Add to order template failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox common resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\r\n result: IOrderTemplateActionErrorResult\r\n) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'ORDER_TEMPLATE',\r\n configureErrors:\r\n result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\nexport function getBuyboxProductAddToOrderTemplate(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): IBuyboxAddToOrderTemplateViewProps | undefined {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n data: {\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n resources\r\n } = props;\r\n\r\n const product = props.data.product?.result;\r\n\r\n const {\r\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\r\n quantity\r\n } = state;\r\n\r\n // If custom amount is selected, add-to-orderTemplate is disabled\r\n if (state.isCustomPriceSelected) {\r\n return undefined;\r\n }\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__add-to-order-template-container`\r\n },\r\n button: product && orderTemplates && (\r\n \r\n ),\r\n errorBlock: (\r\n \r\n )\r\n };\r\n}\r\n\r\n/**\r\n * Renders add to comparison button for the given product.\r\n * @param productComparisonButton - React element of the button.\r\n * @param product - Product information.\r\n * @param catalogId - Current catalog.\r\n * @param state - Buybox state.\r\n * @returns React element of the button.\r\n */\r\nexport function getBuyboxProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: SimpleProduct,\r\n catalogId: number,\r\n state: IBuyboxState\r\n): JSX.Element | undefined {\r\n if (state.isCustomPriceSelected) {\r\n return undefined;\r\n }\r\n\r\n validateCatalogId(catalogId);\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n}\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\r\n result: IWishlistActionErrorResult\r\n) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors:\r\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\nexport function getBuyboxProductAddToWishlist(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n productDetails?: IProductDetails\r\n): IBuyboxAddToWishlistViewProps | undefined {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n data: {\r\n wishlists: { result: wishlists }\r\n },\r\n resources\r\n } = props;\r\n\r\n const product = props.data.product?.result ? props.data.product.result : productDetails?.product;\r\n\r\n const {\r\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\r\n selectedProduct\r\n } = state;\r\n\r\n // If custom amount is selected, add-to-wishlist is disabled\r\n if (state.isCustomPriceSelected) {\r\n return undefined;\r\n }\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__add-to-wishlist-container`\r\n },\r\n button: product && (\r\n \r\n ),\r\n errorBlock: (\r\n \r\n )\r\n };\r\n}\r\n\r\n/**\r\n * On quantity change function.\r\n * @param callbacks -Buybox callbacks.\r\n * @returns Update quantity.\r\n */\r\nconst onQuantityChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number) => {\r\n if (callbacks.updateQuantity) {\r\n callbacks.updateQuantity(newValue);\r\n }\r\n};\r\n\r\nexport function getBuyboxProductQuantity(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): IBuyboxProductQuantityViewProps {\r\n const { resources, typeName } = props;\r\n\r\n const {\r\n quantity,\r\n max,\r\n errorState: { quantityError }\r\n } = state;\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__quantity`\r\n },\r\n LabelContainerProps: {\r\n tag: 'label',\r\n className: `${className}__product-quantity-label`,\r\n htmlFor: `${className}__product-quantity-input`\r\n },\r\n heading:
{resources.productQuantityHeading}
,\r\n errors: quantityError && (\r\n \r\n \r\n ),\r\n input: (\r\n \r\n )\r\n };\r\n}\r\n\r\nexport function getBuyboxShopSimilarButton(\r\n props: IBuyboxExtentedProps,\r\n buttonType: ShopSimiliarButtonType\r\n): IBuyboxShopSimilarLookViewProps {\r\n const { resources, context, typeName } = props;\r\n const product = props.data.product?.result;\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n const navigationUrl = (shopSimiliarButtonType: ShopSimiliarButtonType) => () => {\r\n const searchURL = getUrlSync('search', context && context.actionContext);\r\n const separator = searchURL!.includes('?') ? '&' : '?';\r\n document.location.href = `${searchURL}${separator}productId=${product &&\r\n product.RecordId}&recommendation=${shopSimiliarButtonType}`;\r\n };\r\n const telemetryText =\r\n buttonType === ShopSimiliarButtonType.Looks ? TelemetryConstant.ShopSimliarLooks : TelemetryConstant.ShopSimliarDescription;\r\n const payLoad = getPayloadObject('click', telemetryContent, telemetryText);\r\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\r\n const text = buttonType === ShopSimiliarButtonType.Looks ? resources.shopSimilarLooksText : resources.shopSimilarDescriptionText;\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__shopsimilar${buttonType}`\r\n },\r\n input: (\r\n \r\n {text}\r\n \r\n )\r\n };\r\n}\r\n\r\n/**\r\n * On price change function.\r\n * @param callbacks -Buybox callbacks.\r\n * @returns Update key in price.\r\n */\r\nconst onPriceChangeHandler = (callbacks: IBuyboxCallbacks) => (event: React.ChangeEvent) => {\r\n const value = event.currentTarget.value;\r\n callbacks.updateKeyInPrice(value.length > 0 ? Number(value) : Number.parseFloat(value));\r\n};\r\n\r\nexport function getBuyboxKeyInPrice(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): IBuyboxKeyInPriceViewProps {\r\n const { config, resources } = props;\r\n\r\n const {\r\n errorState: {}\r\n } = state;\r\n\r\n const className = _getClassNamePrefix(props.typeName);\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__key_in_price`\r\n },\r\n LabelContainerProps: {\r\n tag: 'label',\r\n className: `${className}__key_in_price-label`,\r\n htmlFor: `${className}__key_in_price`\r\n },\r\n heading:
{resources.buyboxKeyInPriceLabelHeading}
,\r\n input: (\r\n \r\n )\r\n };\r\n}\r\n\r\nexport const BuyboxErrorBlock: React.FC = ({\r\n showError,\r\n configureErrors,\r\n quantityError,\r\n customAmountError,\r\n otherError,\r\n resources\r\n}) => {\r\n let errorMessages: (string | undefined)[] = [];\r\n\r\n errorMessages = Object.values(configureErrors).filter(message => message !== undefined);\r\n\r\n if (quantityError) {\r\n errorMessages.push(quantityError);\r\n }\r\n\r\n if (customAmountError) {\r\n errorMessages.push(customAmountError);\r\n }\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n }\r\n\r\n return (\r\n 0} color='danger' assertive aria-label={resources.buyboxErrorMessageHeader}>\r\n \r\n {errorMessages.map((message, index) => {\r\n return (\r\n
\r\n {message}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n};\r\n\r\nexport function getQuantityLimitsMessages(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState\r\n): React.ReactElement | undefined {\r\n const { resources } = props;\r\n\r\n const { min, max } = state;\r\n\r\n if (!_isOrderQuantityLimitsFeatureEnabled(props)) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n \r\n {_renderMaxLabel(props, max, resources.maxQuantityText)}\r\n {_renderMinLabel(props, min, resources.minQuantityText)}\r\n \r\n );\r\n}\r\n\r\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\r\n\r\nconst _renderMaxLabel = (\r\n props: IBuyboxExtentedProps,\r\n max: number | undefined,\r\n maxQuantityText: string\r\n): React.ReactElement | undefined => {\r\n const { resources, typeName } = props;\r\n const className = _getClassNamePrefix(typeName);\r\n if (max && max !== 0 && max !== Number.MAX_VALUE) {\r\n return (\r\n

\r\n {resources.informationIconText}\r\n