{"version":3,"file":"static/js/c9e5913358a079ce08c8.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/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action.ts?0785","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/chat/dist/lib/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/chat/dist/lib/modules/msdyn365-pva-chat-connector/actions/getBotFrameworkToken.action');\n registerActionId(actionPath);\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 msdyn365Commerce, * as Msdyn365 from '@msdyn365-commerce/core';\n\n/**\n * Bot Framework input. Used to retrieve existing active bot framework session token.\n */\nexport class GetBotFrameworkInput implements Msdyn365.IActionInput {\n public getCacheKey = () => `CURRENT-BOTFRAMEWORKTOKEN`;\n public getCacheObjectType = () => 'CURRENT-BOTFRAMEWORK-KEY1';\n public dataCacheType = (): Msdyn365.CacheType => 'application';\n}\n\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\n return new GetBotFrameworkInput();\n};\n\nasync function action(input: GetBotFrameworkInput, ctx: Msdyn365.IActionContext): Promise {\n const ISecretValue = await msdyn365Commerce.secretManager?.getSecretValue(\n 'PVA-WEBCHANNELSECURITY-KEY',\n ctx.requestContext.apiSettings.baseUrl\n );\n const apiToken = ISecretValue?.value;\n return apiToken ?? '';\n}\n\nexport default Msdyn365.createObservableDataAction({\n action: >action,\n id: 'getBotFrameworkToken',\n input: createInput\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 { 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 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.\n * All rights reserved. See LICENSE 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 {\n buildCacheKeyWithUrlTokens,\n CurrentCategoryInput,\n getCategoryUrl,\n getCurrentCategory\n} 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\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.\n * All rights reserved. See LICENSE 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:\n context.requestContext && context.requestContext.canonicalUrl\n ? context.requestContext.canonicalUrl.toLocaleLowerCase()\n : 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.\n * All rights reserved. See LICENSE 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\n ? Number(inputData.requestContext.query.skipCount)\n : 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\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings,\n ICreateActionContext,\n 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,\n buildCacheKey,\n generateImageUrl,\n getProductUrlSync,\n getSelectedProductIdFromActionInput,\n 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(\n config: IProductPageSummaryConfig,\n apiSettings: ICommerceApiSettings,\n productId: number,\n requestContext?: IRequestContext\n ) {\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 =>\n `${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(\n args.config,\n args.requestContext.apiSettings,\n +productId,\n args.requestContext\n );\n }\n throw new Error('Unable to create ProductPageSummaryAction input, no productId found on module config or query');\n};\n\n// Checks product attributes for the presence of brand attribute to extract the brand name for product metadata\nconst getProductBrand = async (\n context: IActionContext,\n recordId: number,\n channelId: number,\n catalogId: number\n): Promise => {\n const productAttributes = await getAttributeValuesAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n recordId,\n channelId,\n catalogId\n );\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 {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n apiSettings.channelId,\n [productId],\n null,\n input.catalogId ?? 0\n )\n );\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\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","GetBotFrameworkInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","Msdyn365","action","async","input","ctx","ISecretValue","msdyn365Commerce","getSecretValue","requestContext","apiSettings","baseUrl","apiToken","value","args","createDataActionHook","actionId","postReaderHook","_inputs","cart","actionContext","_msdyn365","telemetry","cartObject","Array","isArray","addedCartLines","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","config","buildCacheKeyWithUrlTokens","this","createObservableDataAction","context","currentCategoryResult","getCurrentCategory","inputData","CurrentCategoryInput","createGetCurrentCategoryInput","currentCategory","categoryUrl","localName","getFriendlyName","locale","NameTranslations","neutralizedName","NeutralizedName","getCategoryUrl","canonicalDomain","toLocaleLowerCase","title","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","src","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","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":""}