{"version":3,"file":"static/js/67fb16ee96829a746674.bundle.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./lib/__local__/module-registration.js?8a42","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/addToCart-telemetry.action.ts?4575","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/copyCart-checkOut-telemetry.action.ts?403f","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/getById-product-telemetry.action.ts?9e39","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/getByIds-product-telemetry.action.ts?1a7f","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/getVariantsByDimensionValues-telemetry.action.ts?b148","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/purchase-telemetry.action.ts?d6c7","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/readCart-telemetry.action.ts?ac14","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/removeFromCart-telemetry.action.ts?b268","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/telemetry.action.helper.ts?7f4a","webpack://@msdyn365-commerce-partners/fabrikam/./src/actions/updateCart-telemetry.action.ts?f56d","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/category-page-summary/category-page-summary.action.ts?c40c","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-page-summary/default-page-summary.action.ts?5b44","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/list-page-summary/list-page-summary.action.ts?a1a8","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/product-page-summary/product-page-summary.action.ts?9992","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action');\n registerActionId(actionPath);\n }\n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.packageDataActions = {};\n window.__bindings__.packageDataActions['__local__'] = {\n ...binding.dataActions\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IAddCartLinesParam, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines added before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeAddToCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were added\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const addCartLinesParams = actionInput.queryParams();\n if (addCartLinesParams && addCartLinesParams.cartLines) {\n // Save info on added cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.addedCartLines = addCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('AddToCart pre-data action hook failed - No added cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('AddToCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an AddToCart event after AddCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterAddToCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const addedCartLines = actionContext.requestContext.telemetryData.addedCartLines;\n let addedProducts: IProductInfo[] = [];\n\n // Collect info on products added to cart\n if (addedCartLines) {\n try {\n addedProducts = await getProductInfoFromCartLinesAsync(addedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('AddCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire AddToCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.AddToCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: addedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/AddCartLines',\n postReaderHook: afterAddToCart,\n preReaderHook: beforeAddToCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * CopyCart data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforeCopyCart = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires an CheckOut event after CopyCart data action completed\n * @param _inputs Data action inputs\n * @param cart New checkout cart\n * @param actionContext Action context\n */\nconst afterCopyCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n let cartLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the cart\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n try {\n cartLineProductUnits = await getProductInfoFromCartLinesAsync(cartObject.CartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('CopyCart post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire Checkout event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.CheckOut, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: cartLineProductUnits,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Copy',\n postReaderHook: afterCopyCart,\n preReaderHook: beforeCopyCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetById = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetById = async (\n _inputs: IActionInput | IActionInput[],\n simpleProduct: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n simpleProduct = await Promise.resolve(Array.isArray(simpleProduct) ? simpleProduct[0] : simpleProduct);\n\n // If simple product result is defined run the post hook\n if (simpleProduct) {\n const productInfo = getProductInfoFromSimpleProduct(simpleProduct);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n actionContext.requestContext.telemetryData[TelemetryEvent.ProductPageView] = productInfo ? [productInfo] : [];\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetById',\n postReaderHook: afterGetById,\n preReaderHook: beforeGetById\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetByIds = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetByIds = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetByIds',\n postReaderHook: afterGetByIds,\n preReaderHook: beforeGetByIds\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetVariantsByDimensionValues = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetVariantsByDimensionValues = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetVariantsByDimensionValues',\n postReaderHook: afterGetVariantsByDimensionValues,\n preReaderHook: beforeGetVariantsByDimensionValues\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Checkout data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforePurchase = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires a Purchase event after Checkout data action completed\n * @param _inputs Data action inputs\n * @param salesOrder Sales order for transaction\n * @param actionContext Action context\n */\nconst afterPurchase = async (\n _inputs: IActionInput | IActionInput[],\n salesOrder: SalesOrder | SalesOrder[],\n actionContext: IActionContext\n) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const salesObject = Array.isArray(salesOrder) ? salesOrder[0] : salesOrder;\n let saleLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the sales order\n if (salesObject && salesObject.SalesLines && Array.isArray(salesObject.SalesLines) && salesObject.SalesLines.length > 0) {\n try {\n saleLineProductUnits = await getProductInfoFromCartLinesAsync(salesObject.SalesLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('Checkout post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Store the purchased product information so that we can avoid \"code triggered\" remove from cart telemetry event.\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase] = {\n id: salesObject.Id,\n affiliation: salesObject.ChannelId ? salesObject.ChannelId.toString() : '',\n revenue: salesObject.NetAmountWithoutTax,\n tax: salesObject.TaxAmount,\n // shippingCost?: // Confirm if it is delivery mode charge amount;\n products: saleLineProductUnits\n };\n\n // Fire Purchase event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.Purchase,\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase]\n );\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Checkout',\n postReaderHook: afterPurchase,\n preReaderHook: beforePurchase\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\n\nconst beforeRead = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterRead = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n try {\n const activeCart = await Promise.resolve(Array.isArray(cart) ? cart[0] : cart);\n actionContext.requestContext.telemetryData.activeCart = activeCart;\n } catch (e) {\n actionContext.telemetry.debug('ReadCart post-data action hook failed.', e);\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Read',\n postReaderHook: afterRead,\n preReaderHook: beforeRead\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Cart, CartLine, IDataServiceRequest, IRemoveCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines removed before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeRemoveFromCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were removed\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const removeCartLinesParams = actionInput.queryParams();\n if (removeCartLinesParams && removeCartLinesParams.cartLineIds) {\n // Save info on removed cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.removedCartLineIds = removeCartLinesParams.cartLineIds;\n return;\n }\n }\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed - No removed cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires a RemoveFromCart event after RemoveCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been removed\n * @param actionContext Action context\n */\nconst afterRemoveFromCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const removeCartLineIds = actionContext.requestContext.telemetryData.removedCartLineIds;\n const activeCart = actionContext.requestContext.telemetryData.activeCart;\n const productTransaction = actionContext.requestContext.telemetryData[TelemetryEvent.Purchase];\n const removedCartLines: CartLine[] = [];\n let removedProducts: IProductInfo[] = [];\n\n // Collect info on products removed from cart\n if (removeCartLineIds && activeCart && activeCart.CartLines) {\n activeCart.CartLines.forEach((cartLine: CartLine) => {\n if (\n cartLine.ProductId &&\n removeCartLineIds.indexOf(cartLine.LineId ? cartLine.LineId : '') !== -1 &&\n !(\n productTransaction &&\n productTransaction.products &&\n productTransaction.products.some(product => +product.productSku === cartLine.ProductId)\n )\n ) {\n removedCartLines.push(cartLine);\n }\n });\n\n if (removedCartLines.length > 0) {\n try {\n removedProducts = await getProductInfoFromCartLinesAsync(removedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('RemoveCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n }\n\n // Fire RemoveFromCart event if cart lines were removed\n if (removedCartLines && removedCartLines.length > 0) {\n window._msdyn365.telemetry.logEvent(TelemetryEvent.RemoveFromCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: removedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n } else {\n actionContext.telemetry.debug('No RemoveFromCart event fired, no removed cart lines found');\n }\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/RemoveCartLines',\n postReaderHook: afterRemoveFromCart,\n preReaderHook: beforeRemoveFromCart\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core-internal';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * Converts cart line products into promise of array of product info\n * @param cartLines Cart Lines with product info to collect\n * @param actionContext Action context\n * @returns Array of product info\n */\nexport const getProductInfoFromCartLinesAsync = async (cartLines: CartLine[], actionContext: IActionContext): Promise => {\n if (actionContext.requestContext.channel === undefined) {\n throw new Error('Unable to make product call, channel ID not provided');\n }\n\n const productPromises: Promise[] = [];\n\n // Call GetById API for all products in cartLines\n for (let i = 0; i < cartLines.length; i++) {\n // eslint-disable-next-line security/detect-object-injection -- bracket object notation with user input present leads to eslint security issue.\n const cartLine: CartLine = cartLines[i];\n\n if (cartLine.ProductId) {\n // The product id in cartLine actually contains recordId and not master product id so we can use it up here to lookup product.\n productPromises.push(\n getByIdAsync({ callerContext: actionContext }, cartLine.ProductId, actionContext.requestContext.channel.RecordId).then(\n result => {\n // Construct basic IProductInfo object for product\n const productInfo = getProductInfoFromSimpleProduct(result);\n\n // Attach fields from the CartLine\n productInfo.productPrice = cartLine.Price ? cartLine.Price.toString() : '';\n productInfo.productQuantity = cartLine.Quantity ? cartLine.Quantity.toString() : '';\n\n return productInfo;\n },\n reason => {\n throw new Error(`Failed to get product details for product ${cartLine.ProductId}.\\n${reason}`);\n }\n )\n );\n }\n }\n\n // Return promise for array of product results\n return Promise.all(productPromises);\n};\n\n/**\n * Converts a SimpleProduct object into an IProductInfo object\n * @param simpleProduct Simple Product object\n * @returns Populated IProductInfo\n */\nexport const getProductInfoFromSimpleProduct = (simpleProduct: SimpleProduct): IProductInfo => {\n const recordId = simpleProduct.RecordId || '';\n\n return {\n // If master product id is not available then product record id is master product id\n productId: simpleProduct.MasterProductId ? simpleProduct.MasterProductId.toString() : recordId.toString(),\n productSku: recordId ? recordId.toString() : '',\n productName: simpleProduct.Name || simpleProduct.Description || '',\n productPrice: simpleProduct.Price ? simpleProduct.Price.toString() : '',\n productChannelId: '', // Not needed for each product, sent as part of all events\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productQuantity: '', // Cannot be deteremined from SimpleProduct, will be added from CartLine later\n productCurrency: '' // Not needed for each product, sent as part of all events with product data\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IDataServiceRequest, IUpdateCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines updated before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeUpdateCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were updated\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const updateCartLinesParams = actionInput.queryParams();\n if (updateCartLinesParams && updateCartLinesParams.cartLines) {\n // Save info on updated cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.updatedCartLines = updateCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed - No updated cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an UpdateInCart event after UpdateCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterUpdateCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const updatedCartLines = actionContext.requestContext.telemetryData.updatedCartLines;\n let updatedProducts: IProductInfo[] = [];\n\n // Collect info on products updated in cart\n if (updatedCartLines) {\n try {\n updatedProducts = await getProductInfoFromCartLinesAsync(updatedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('UpdateCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire UpdateInCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.UpdateInCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: updatedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/UpdateCartLines',\n postReaderHook: afterUpdateCart,\n preReaderHook: beforeUpdateCart\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n getFriendlyName,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { buildCacheKeyWithUrlTokens, CurrentCategoryInput, getCategoryUrl, getCurrentCategory } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/**\n * Category Page Summary Input\n */\nexport class CategoryPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'CategoryPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('CategoryPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createGetCurrentCategoryInput = (inputData: IActionContext): CurrentCategoryInput => {\n if (inputData && inputData.requestContext) {\n return new CurrentCategoryInput(inputData.requestContext);\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n\nconst action = async (input: CategoryPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let currentCategoryResult;\n try {\n currentCategoryResult = await getCurrentCategory(createGetCurrentCategoryInput(context), context);\n } catch {\n // Do nothing, if the action fails fallback to values defined in data\n }\n if (currentCategoryResult) {\n const currentCategory = { ...currentCategoryResult };\n let categoryUrl: string | undefined;\n try {\n // Reset category's name neutralizedName\n const localName = getFriendlyName(context.requestContext.locale, currentCategory.NameTranslations);\n const neutralizedName = currentCategory.NeutralizedName || currentCategory.Name;\n currentCategory.Name = localName;\n currentCategory.NeutralizedName = neutralizedName;\n categoryUrl = getCategoryUrl(currentCategory);\n\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (categoryUrl && canonicalDomain) {\n categoryUrl = `https://${canonicalDomain}${categoryUrl}`.toLocaleLowerCase();\n } else {\n categoryUrl = undefined;\n }\n } catch {\n categoryUrl = undefined;\n }\n return {\n title: currentCategory.Name,\n sharingImageUrl: currentCategory.OfflineImage,\n canonicalUrl: categoryUrl,\n faviconUrl: config && config.faviconUrl\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/category-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new CategoryPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { buildCacheKeyWithUrlTokens } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IDefaultPageSummaryConfig } from './default-page-summary.props.autogenerated';\n\nexport interface IPageSummaryData {\n title?: string;\n description?: string;\n keywords?: string;\n sharingImageUrl?: string;\n canonicalUrl?: string;\n faviconUrl?: string;\n}\n\n/**\n * Page Summary Input\n */\nexport class PageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'PageSummary';\n\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('PageSummary', this.requestContext)}-${this.config.title}`;\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst action = async (input: PageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n return {\n title: config && config.title,\n description: config && config.description,\n keywords: config && config.keywords,\n sharingImageUrl: config && config.sharingImage && config.sharingImage.src,\n canonicalUrl: context.requestContext && context.requestContext.canonicalUrl ? context.requestContext.canonicalUrl.toLocaleLowerCase() : undefined,\n faviconUrl: config && config.faviconUrl\n };\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/default-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new PageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { Image, ISubList } from '@msdyn365-commerce-modules/data-types';\nimport { buildCacheKeyWithUrlTokens, getList, ListInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { IProductItem } from '@msdyn365-commerce-modules/retail-actions/dist/types/get-list';\n\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/**\n * List Page Summary Input\n */\nexport class ListPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'ListPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ListPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * List item type enum.\n */\nenum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Get the url of sub list.\n * @param listName\n * @param sitePath\n */\nfunction getSubListUrl(listName: string, sitePath: string): string {\n if (!listName) {\n return '';\n }\n\n if (!sitePath) {\n return `/${listName}.l`;\n }\n\n // SitePath has a leading '/'\n return `${sitePath}/${listName}.l`;\n}\n\n/**\n * Get sub list item.\n * @param item\n * @param sitePathOfRequest\n */\nfunction getSubListItem(item: IGeneric, sitePathOfRequest: string): ISubList {\n const imageList: Image[] = getImages(item.fields.content.images);\n\n const sublistHref = getSubListUrl(item.fields._name, sitePathOfRequest);\n return {\n Title: item.fields.content.title,\n Description: item.fields.content.description,\n ShortDescription: item.fields.content.shortDescription,\n BackgroundColor: item.fields.content.backgroundColor,\n ForegroundColor: item.fields.content.foregroundColor,\n Href: sublistHref,\n Images: imageList\n };\n}\n\n/**\n * Get site path.\n * @param inputData\n */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page.\n * @param inputData\n */\nfunction getItemsPerPage(inputData: ICreateActionContext, IGeneric>): number {\n if (!inputData || !inputData.config || !inputData.config.itemsPerPage) {\n return 50;\n }\n\n const result = Number(inputData.config.itemsPerPage);\n if (isNaN(result)) {\n return 50;\n }\n\n return result;\n}\n\n/**\n * Get skip count.\n * @param inputData\n */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount ? Number(inputData.requestContext.query.skipCount) : 0;\n}\n\n/**\n * Get images.\n * @param images\n */\nfunction getImages(images: IGeneric[]): Image[] {\n const resultImageList: Image[] = [];\n\n if (!images) {\n return resultImageList;\n }\n\n images.forEach(item => {\n if (item && item.image && item.image.href) {\n // Add image item\n const imageItem: Image = {\n href: item.image.href,\n altText: item.image.altText,\n title: item.image.title,\n width: item.image.width,\n height: item.image.height\n };\n\n resultImageList.push(imageItem);\n }\n });\n\n return resultImageList;\n}\n\n/**\n * Get input list data.\n * @param inputData\n */\nfunction getInputListData(inputData: ICreateActionContext, IGeneric>): IGeneric {\n let listData =\n !inputData || !inputData.requestContext || !inputData.requestContext.pageData ? null : inputData.requestContext.pageData.list;\n if (\n !inputData ||\n !inputData.requestContext ||\n !inputData.requestContext.pageData ||\n !inputData.requestContext.pageData.list ||\n !inputData.requestContext.pageData.list.content ||\n !inputData.requestContext.pageData.list.content.items ||\n !inputData.requestContext.pageData.list.content.title ||\n !inputData.requestContext.pageData.list._id\n ) {\n if (\n !inputData ||\n !inputData.data ||\n !inputData.data.list ||\n !inputData.data.list.content ||\n !inputData.data.list.content.items ||\n !inputData.data.list.content.title ||\n !inputData.data.list._id\n ) {\n console.error('data is not well defined for list action input');\n throw new Error('data is not well defined for list action input');\n }\n\n listData = inputData.data.list;\n }\n return listData;\n}\n\nconst createGetListInput = (inputData: IActionContext): ListInput => {\n const listData: IGeneric = getInputListData(inputData);\n const listItems: (IProductItem[] | ISubList)[] = [];\n let productList: IProductItem[] = [];\n\n const parentImageList: Image[] = getImages(listData.content.images);\n\n const itemsPerPage = getItemsPerPage(inputData);\n const skipCount = getSkipCount(inputData);\n\n // This is the list contains all product and will be used to call getSimpleProducts data action.\n const productItems: IProductItem[] = [];\n const sum = skipCount + itemsPerPage;\n for (let index = skipCount; index < listData.content.items.length && index < sum; index++) {\n const item = listData.content.items[index];\n if (item.type === ListItemType.list) {\n if (!item.fields || !item.fields.content || !item.fields.content.title) {\n console.error(`sublist item fields, content or title missing in list ${listData._id}`);\n continue;\n }\n\n // If any elements in product list, then copy it and add to list items\n if (productList.length > 0) {\n const clonedList = [...productList];\n listItems.push(clonedList);\n productList = [];\n }\n\n // Build and add sublist item\n listItems.push(getSubListItem(item, getSitePath(inputData)));\n }\n\n if (item.type === ListItemType.product) {\n if (!item.fields || !item.fields.recordId) {\n console.error(`product item missing recordId in list ${listData._id}`);\n continue;\n }\n\n // Add product item\n const productItem: IProductItem = {\n RecordId: item.fields.recordId,\n CatalogId: item.fields.catalogId || '0'\n };\n\n productList.push(productItem);\n productItems.push(productItem);\n }\n }\n\n // Save the last portion of product items.\n if (productList.length > 0) {\n listItems.push(productList);\n }\n\n return new ListInput(\n listData._id,\n listData.content.title,\n listData.content.description,\n listData.content.shortDescription,\n listData.content.backgroundColor,\n listData.content.foregroundColor,\n parentImageList,\n listItems,\n productItems,\n listData.content.items.length,\n itemsPerPage,\n skipCount\n );\n};\n\nconst action = async (input: ListPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let listData;\n try {\n listData = await getList(createGetListInput(context), context);\n } catch {\n // Do nothing, if there's an error running the action fall back to values defined from data\n }\n if (listData && listData.Title) {\n return {\n title: listData.Title,\n description: listData.Description\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n description: config.description\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/list-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new ListPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, getCatalogId, IAction,\n IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext, IRequestContext\n} from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getAttributeValuesAsync, getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {\n ArrayExtensions, buildCacheKey, generateImageUrl, getProductUrlSync, getSelectedProductIdFromActionInput, QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IPageSummaryData } from '../IPageSummaryData';\nimport { IProductPageSummaryConfig } from './product-page-summary.props.autogenerated';\n\n/**\n * Product Page Summary Input.\n */\nexport class ProductPageSummaryInput implements IActionInput {\n public apiSettings: ICommerceApiSettings;\n\n public config: IProductPageSummaryConfig;\n\n public productId: number;\n\n public catalogId?: number;\n\n public constructor(config: IProductPageSummaryConfig, apiSettings: ICommerceApiSettings, productId: number, requestContext?: IRequestContext) {\n this.config = config || {};\n this.apiSettings = apiSettings;\n this.productId = productId;\n\n if (requestContext) {\n this.catalogId = getCatalogId(requestContext);\n }\n }\n\n public getCacheObjectType = (): string => 'ProductPageSummary';\n\n public getCacheKey = (): string => `${buildCacheKey('ProductPageSummary', this.apiSettings)}-${this.config.title}-${this.productId}-${this.catalogId ?? 0}`;\n\n public dataCacheType = (): CacheType => 'application';\n}\n\nexport interface IProductPageSummary extends IPageSummaryData {\n price?: number;\n productId?: number;\n productBrand?: string;\n}\n\nconst createInput = (args: ICreateActionContext) => {\n const productId = getSelectedProductIdFromActionInput(args);\n\n if (productId) {\n return new ProductPageSummaryInput(args.config, args.requestContext.apiSettings, +productId, args.requestContext);\n }\n throw new Error('Unable to create ProductPageSummaryAction input, no productId found on module config or query');\n\n};\n\n// Checks product attributes for the presence of brand attribute to extract the brand name for product metadata\nconst getProductBrand = async (context: IActionContext, recordId: number, channelId: number, catalogId: number): Promise => {\n const productAttributes = await getAttributeValuesAsync({\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n }, recordId, channelId, catalogId);\n for (const productAttribute of productAttributes) {\n if (productAttribute.Name === 'Brand') {\n return productAttribute.TextValue;\n }\n }\n return;\n};\n\nconst action = async (input: ProductPageSummaryInput, context: IActionContext): Promise => {\n const { config, productId, apiSettings } = input;\n let simpleProductsData: SimpleProduct[] | undefined;\n try {\n simpleProductsData = ArrayExtensions.validValues(\n await getByIdsAsync({\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n }, apiSettings.channelId, [productId], null, input.catalogId ?? 0));\n } catch {\n // Do nothing, if there's an error we fall back to values defined from config\n }\n if (ArrayExtensions.hasElements(simpleProductsData)) {\n const simpleProductData = simpleProductsData[0];\n let productUrl: string | undefined;\n try {\n productUrl = getProductUrlSync(simpleProductData, context);\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (productUrl && canonicalDomain) {\n productUrl = `https://${canonicalDomain}${productUrl}`.toLocaleLowerCase();\n } else {\n productUrl = undefined;\n }\n } catch {\n productUrl = undefined;\n }\n let productBrand: string | undefined;\n try {\n productBrand = await getProductBrand(context, productId, apiSettings.channelId, input.catalogId ?? 0);\n } catch {\n productBrand = undefined;\n }\n return {\n title: simpleProductData.Name,\n description: simpleProductData.Description,\n sharingImageUrl: generateImageUrl(simpleProductData.PrimaryImageUrl, apiSettings),\n canonicalUrl: productUrl,\n faviconUrl: config && config.faviconUrl,\n productId: simpleProductData.RecordId,\n price: simpleProductData.AdjustedPrice,\n productBrand\n };\n\n // If the action fails fallback to values defined from config\n } else if (config) {\n return {\n title: config.title,\n description: config.description,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/product-page-summary',\n action: >action,\n input: createInput\n});\n","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","registerActionId","actionPath","default","prototype","id","Object","keys","forEach","exportName","Action","require","window","__bindings__","packageDataActions","createDataActionHook","actionId","postReaderHook","async","_inputs","cart","actionContext","_msdyn365","telemetry","cartObject","Array","isArray","addedCartLines","requestContext","telemetryData","addedProducts","getProductInfoFromCartLinesAsync","error","logEvent","TelemetryEvent","cartId","Id","cartVersion","Version","toString","products","orderId","OrderNumber","preReaderHook","inputs","actionInput","queryParams","addCartLinesParams","cartLines","debug","e","cartLineProductUnits","CartLines","length","simpleProduct","Promise","resolve","productInfo","getProductInfoFromSimpleProduct","productSku","simpleProducts","product","salesOrder","salesObject","saleLineProductUnits","SalesLines","affiliation","ChannelId","revenue","NetAmountWithoutTax","tax","TaxAmount","activeCart","removeCartLineIds","removedCartLineIds","productTransaction","removedCartLines","removedProducts","cartLine","ProductId","indexOf","LineId","some","push","removeCartLinesParams","cartLineIds","undefined","channel","Error","productPromises","i","getByIdAsync","callerContext","RecordId","then","result","productPrice","Price","productQuantity","Quantity","reason","all","recordId","productId","MasterProductId","productName","Name","Description","productChannelId","productChannelName","productCategoryId","productCategoryName","productCurrency","updatedCartLines","updatedProducts","updateCartLinesParams","CategoryPageSummaryInput","constructor","config","getCacheObjectType","getCacheKey","buildCacheKeyWithUrlTokens","this","dataCacheType","createObservableDataAction","action","input","context","currentCategoryResult","getCurrentCategory","inputData","CurrentCategoryInput","createGetCurrentCategoryInput","currentCategory","categoryUrl","localName","getFriendlyName","locale","NameTranslations","neutralizedName","NeutralizedName","getCategoryUrl","canonicalDomain","toLocaleLowerCase","title","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","src","args","PageSummaryInput","description","keywords","ListItemType","ListPageSummaryInput","getSubListItem","item","sitePathOfRequest","imageList","getImages","fields","content","images","sublistHref","listName","_name","sitePath","Title","ShortDescription","shortDescription","BackgroundColor","backgroundColor","ForegroundColor","foregroundColor","Href","Images","getSitePath","resultImageList","image","href","imageItem","altText","width","height","createGetListInput","listData","pageData","list","items","_id","data","console","getInputListData","listItems","productList","parentImageList","itemsPerPage","Number","isNaN","getItemsPerPage","skipCount","query","getSkipCount","productItems","sum","index","type","clonedList","productItem","CatalogId","catalogId","ListInput","getList","ProductPageSummaryInput","apiSettings","buildCacheKey","getCatalogId","simpleProductsData","ArrayExtensions","getByIdsAsync","queryResultSettings","QueryResultSettingsProxy","channelId","simpleProductData","productUrl","productBrand","getProductUrlSync","productAttributes","getAttributeValuesAsync","productAttribute","TextValue","getProductBrand","generateImageUrl","PrimaryImageUrl","price","AdjustedPrice","getSelectedProductIdFromActionInput","module","exports","React","ReactDOM"],"sourceRoot":""}