{"version":3,"file":"static/js/53bb1ddfbad6c28250a5.bundle.js","mappings":"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","sources":["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/components/container-background-image/container-background-image-helper.ts?ce2e","webpack://@msdyn365-commerce-partners/fabrikam/./src/components/container-background-image/container-backgroud-image.tsx?e863","webpack://@msdyn365-commerce-partners/fabrikam/./src/components/base-components.tsx?daec","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-container-2-slots/default-container-2-slots.tsx?8065","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-container-3-slots/default-container-3-slots.tsx?ac77","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-container/default-container.tsx?01c3","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-external-script/default-external-script.tsx?2a33","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-inline-script/default-inline-script.tsx?5ccd","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-metatags/default-metatags.tsx?97a7","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-page/default-page.tsx?b382","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/place-holder-for-container-preview/place-holder-for-container-preview.tsx?605e","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/script-injector/script-injector.tsx?5a34","webpack://@msdyn365-commerce-partners/fabrikam/./src/utils/classnames.ts?a0ff","webpack://@msdyn365-commerce-partners/fabrikam/./src/utils/script-utils.ts?cb52"],"sourcesContent":["/*!\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 msdyn365Commerce, {\n constructViewportInformationForImage,\n getImageResizeUrl,\n getLargestGridSettingViewportName,\n getMinMaxWidth,\n IAny,\n IGeneric,\n IViewPort,\n Viewport\n} from '@msdyn365-commerce/core-internal';\nimport { cloneDeep as _cloneDeep } from 'lodash';\nimport {\n BackgroundImageRepeat,\n BackgroundImageSize,\n IBackgroundImageAttributes,\n IBackgroundImageLazyloadAttributes,\n IBackgroundImageProps,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst getBackgroundRepeatProperty = (size: string | undefined, repeat: string | undefined): BackgroundImageRepeat => {\n if (!size || size === 'cover') {\n return 'no-repeat';\n }\n switch (repeat) {\n case 'noRepeat':\n return 'no-repeat';\n case 'repeat':\n return 'repeat';\n default:\n return 'no-repeat';\n }\n};\n\nconst getBackgroundSizeProperty = (size: string | undefined): BackgroundImageSize => {\n switch (size) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'default':\n default:\n return undefined;\n }\n};\n\nconst getDefaultViewports = (): IViewPort => {\n return {\n xs: {\n w: 800,\n h: 600\n },\n sm: {\n w: 1200,\n h: 900\n },\n md: {\n w: 1600,\n h: 900\n },\n lg: {\n w: 1600,\n h: 700\n },\n xl: {\n w: 1600,\n h: 700\n }\n };\n};\n\nconst getAuthoringViewport = (moduleName: string | undefined, layout: string | undefined): IViewPort | undefined => {\n if (!msdyn365Commerce.isBrowser) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const authoringHelper = (window as any)._msdyn365.authoringHelper;\n if (!authoringHelper) {\n return;\n }\n\n // if authoring helper is setup, component is rendering from site builder. Build viewport based on layout selected.\n return constructViewportInformationForImage(moduleName, layout, 'backgroundImage', authoringHelper?.themeSettings) as IViewPort;\n};\n\nexport const buildBackgroundImageStylesByViewport = (props: IBackgroundImageProps): IGeneric => {\n const { containerType, image, request, configs } = props;\n\n const gridSettings = request.gridSettings ?? {};\n const imageSettings = image.imageSettings;\n\n const styles: IGeneric = {};\n\n const largestGridSettingViewportName = getLargestGridSettingViewportName(gridSettings);\n if (largestGridSettingViewportName && imageSettings) {\n // in site builder the layout may change, so use authoring viewports.\n const authoringViewPorts = getAuthoringViewport(containerType, configs?.layout);\n const imgSettings = {\n ...imageSettings,\n viewports: { ..._cloneDeep(authoringViewPorts || imageSettings.viewports || getDefaultViewports()) }\n };\n\n // Skip resizing width and height for background images.\n const skipWidthAndHeightSettings = true;\n Object.keys(imgSettings.viewports).map(vp => {\n const viewport = vp as Viewport;\n const minMaxWidth = getMinMaxWidth(gridSettings, imgSettings, viewport, largestGridSettingViewportName);\n const urlSrc = getImageResizeUrl(\n image.src,\n imgSettings.viewports[viewport],\n imgSettings,\n skipWidthAndHeightSettings,\n image?.externalProvider,\n request?.apiSettings\n );\n styles[viewport] = {\n maxWidth: minMaxWidth.max,\n minWidth: minMaxWidth.min,\n minHeight: imgSettings.viewports[viewport]?.h,\n backgroundImage: urlSrc,\n backgroundRepeat: getBackgroundRepeatProperty(configs?.size, configs?.repeat),\n backgroundSize: getBackgroundSizeProperty(configs?.size),\n backgroundPosition: 'center center'\n };\n });\n }\n\n return styles;\n};\n\nexport const setStyleAttribute = (currentStyle: IBackgroundImageStyle): IGeneric => {\n let style: IGeneric = {};\n if (currentStyle) {\n style = { ...currentStyle };\n style['minWidth'] = undefined;\n style['width'] = '100%';\n if (currentStyle.backgroundImage) {\n style['backgroundImage'] = `url('${currentStyle.backgroundImage}')`;\n }\n }\n return style;\n};\n\nexport const getBackgroundImageLazyloadAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined,\n styles: IGeneric\n): IBackgroundImageLazyloadAttributes => {\n const attributes = {\n role: 'img',\n className: `${className} lazyload`,\n 'data-bgset': getDataBgSetAttribute(styles)\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n // On lazyload, lazysizes plugin should pick which background image to use based on data-bgset attribute.\n attributes['style']['backgroundImage'] = undefined;\n }\n return attributes;\n};\n\nexport const getBackgroundImageAttributes = (\n className: string,\n currentStyle: IBackgroundImageStyle | undefined\n): IBackgroundImageAttributes => {\n const attributes = {\n role: 'img',\n className\n };\n\n if (currentStyle) {\n attributes['style'] = setStyleAttribute(currentStyle);\n }\n return attributes;\n};\n\nexport const getBgSetMinMaxWidthAttribute = (style: IBackgroundImageStyle): string => {\n if (style.maxWidth) {\n return `[(max-width: ${style.maxWidth}px)]`;\n }\n return '';\n};\n\nexport const getDataBgSetAttribute = (styles: IGeneric): string => {\n const dataBgSetAttributes: string[] = [];\n Object.keys(styles).map(vp => {\n if (styles[vp].backgroundImage) {\n dataBgSetAttributes.push(`${styles[vp].backgroundImage} ${getBgSetMinMaxWidthAttribute(styles[vp])}`);\n }\n });\n\n return dataBgSetAttributes.join(' | ');\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, { getLargestGridSettingViewportName, IGeneric } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isEqual as _isEqual } from 'lodash';\nimport {\n buildBackgroundImageStylesByViewport,\n getBackgroundImageAttributes,\n getBackgroundImageLazyloadAttributes\n} from './container-background-image-helper';\nimport {\n IBackgroundImageAttributes,\n IBackgroundImageProps,\n IBackgroundImageState,\n IBackgroundImageStyle\n} from './container-background-image-interfaces';\n\nconst BACKGROUND_IMAGE_CLASS_NAME = 'ms-container-background-image';\n\n/**\n * BackgroundImage component\n * @extends {React.PureComponent}\n */\nexport class BackgroundImage extends React.PureComponent {\n private stylesByViewport: IGeneric;\n private currentStyle: IBackgroundImageStyle | undefined;\n private mounted: boolean;\n\n constructor(props: IBackgroundImageProps, state: IBackgroundImageState) {\n super(props);\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this.currentStyle = this._getCurrentStyle();\n this.mounted = false;\n this._componentResize = this._componentResize.bind(this);\n this._getCurrentStyle = this._getCurrentStyle.bind(this);\n this.state = { updateAttributes: false };\n }\n\n public componentDidMount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this._componentResize);\n this.mounted = true;\n this._componentResize();\n }\n }\n\n public componentWillUnmount(): void {\n if (msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this._componentResize);\n this.mounted = false;\n }\n }\n\n public shouldComponentUpdate(nextProps: IBackgroundImageProps, nextState: { updateAttributes: boolean }): boolean {\n if (\n this.state !== nextState ||\n this.props.request?.gridSettings !== nextProps.request?.gridSettings ||\n this.props.configs.repeat !== nextProps.configs.repeat ||\n this.props.configs.size !== nextProps.configs.size ||\n this.props.configs.layout !== nextProps.configs.layout ||\n this.props.image?.imageSettings !== nextProps.image?.imageSettings ||\n this.props.image?.src !== nextProps.image?.src\n ) {\n return true;\n }\n return false;\n }\n\n public render(): JSX.Element | null {\n const { children } = this.props;\n\n try {\n this.stylesByViewport = buildBackgroundImageStylesByViewport(this.props);\n this.currentStyle = this._getCurrentStyle();\n\n if (this.currentStyle) {\n const processedAtributes = this._processAttributes(\n BACKGROUND_IMAGE_CLASS_NAME,\n this.currentStyle,\n this.stylesByViewport,\n this._isLazyload()\n );\n const attributes = this._getAttributes(processedAtributes);\n if (this.state.updateAttributes) {\n // Update component with the latest attributes.\n return
{children}
;\n } else if (this._isLazyload()) {\n // On lazyload, only include the class name on the first render.\n return
{children}
;\n } else {\n // On lazyload disabled, render the default attributes from server side.\n return
{children}
;\n }\n } else {\n // in no style is found, return the container content.\n return <>{children};\n }\n } catch {\n // in case of any failure, return the container content.\n return <>{children};\n }\n }\n\n private _processAttributes(\n className: string,\n currentStyle: IBackgroundImageStyle,\n stylesByViewport: IGeneric,\n lazyLoad: boolean\n ) {\n if (lazyLoad) {\n return getBackgroundImageLazyloadAttributes(className, currentStyle, stylesByViewport);\n } else {\n return getBackgroundImageAttributes(className, currentStyle);\n }\n }\n\n private _getAttributes(processedAtributes: IBackgroundImageAttributes) {\n return { ...processedAtributes, style: { ...processedAtributes?.style } };\n }\n\n private _componentResize(): void {\n if (msdyn365Commerce.isBrowser) {\n const selectedStyle = this._getCurrentStyle();\n\n if (this.mounted || (selectedStyle && !_isEqual(this.currentStyle, selectedStyle))) {\n this.setState({ updateAttributes: true });\n }\n }\n }\n\n private _getCurrentStyle(): IBackgroundImageStyle | undefined {\n if (msdyn365Commerce.isBrowser) {\n const winInnerWidth: number = window.innerWidth;\n let selectedStyle: IBackgroundImageStyle | undefined;\n Object.keys(this.stylesByViewport).map(vp => {\n if (\n (this.stylesByViewport[vp]?.minWidth || this.stylesByViewport[vp]?.maxWidth) &&\n (this.stylesByViewport[vp]?.minWidth || 0) <= winInnerWidth &&\n winInnerWidth <= (this.stylesByViewport[vp]?.maxWidth || Number.MAX_SAFE_INTEGER)\n ) {\n selectedStyle = this.stylesByViewport[vp];\n }\n });\n return selectedStyle;\n } else {\n return this._getDefaultStyle();\n }\n }\n\n private _isLazyload(): boolean {\n // Lazyload by default if nothing is specified\n return !this.props.image?.imageSettings?.disableLazyLoad;\n }\n\n private _getDefaultStyle(): IBackgroundImageStyle | undefined {\n const { request } = this.props;\n const largestGridSettingViewportName = getLargestGridSettingViewportName(request.gridSettings ?? {});\n return this.stylesByViewport[largestGridSettingViewportName];\n }\n\n private _getDefaultAttributes(): IBackgroundImageAttributes {\n const style = this._getDefaultStyle();\n const processedAtributes = style\n ? this._processAttributes(BACKGROUND_IMAGE_CLASS_NAME, style, this.stylesByViewport, this._isLazyload())\n : {};\n return this._getAttributes(processedAtributes);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, IImageData, IRequestContext, Text } from '@msdyn365-commerce/core';\nimport * as React from 'react';\nimport { BackgroundImage } from './container-background-image/container-backgroud-image';\n\n/**\n * Heading options\n */\nexport interface IHeadingComponentProps {\n /**\n * Heading text\n */\n headingText?: string;\n /**\n * Heading tag (h1, h2, h3, h4, h5, h6)\n */\n tag?: HeadingTag;\n /**\n * Heading text size (sm, md, lg, xl)\n */\n textSize?: TextSize;\n\n requestContext: IRequestContext;\n\n handleTextChange(event: ContentEditableEvent): string;\n}\n\nexport type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\nexport type TextSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Container class options\n */\nexport interface IContainerProps {\n /**\n * CSS class name\n */\n className?: string;\n /**\n * Bootstrap supported container types\n */\n containerType?: string;\n /**\n * type name\n */\n typeName?: string;\n /**\n * id of container\n */\n id?: string;\n /**\n * React children\n */\n children: React.ReactNode;\n /**\n * Request context\n */\n request?: IRequestContext;\n /**\n * background image\n */\n backgroundImage?: IImageData;\n /**\n * background image repeat property\n */\n backgroundImageRepeat?: string;\n /**\n * background image size property\n */\n backgroundImageSize?: string;\n /**\n * module layout property\n */\n moduleLayout?: string;\n}\n\nconst getContainerType = (containerType: string | undefined) => {\n switch (containerType) {\n case 'container':\n return 'container';\n case 'fluid':\n default:\n return 'fluid';\n }\n};\n\n/**\n * HOC to create bootstrap container div. If no container type is specified children are rendered.\n * @param options IContainerClasses\n */\nexport const Container: React.SFC = (props: IContainerProps): JSX.Element => {\n const {\n containerType,\n className,\n typeName,\n id,\n children,\n backgroundImage,\n request,\n backgroundImageRepeat,\n backgroundImageSize,\n moduleLayout\n } = props;\n const customClassName = className ? ` ${className}` : '';\n\n let containerContent = children;\n if (containerType) {\n containerContent =
{containerContent}
;\n }\n\n if (backgroundImage && backgroundImage.src && backgroundImage.imageSettings && request) {\n containerContent = (\n \n {containerContent}\n \n );\n }\n\n return containerType ? (\n
{containerContent}
\n ) : (\n
{containerContent}
\n );\n};\n\nexport const HeadingComponent = (props: IHeadingComponentProps & { className: string }): JSX.Element | null => {\n const { tag, headingText, textSize, className } = props;\n const Tag = tag || 'h2';\n const classNameWithHeading = textSize ? `heading ${textSize} ${className}` : `heading ${className}`;\n return (\n (headingText && (\n \n )) ||\n null\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport React, { ReactNode } from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { getColClassArray, showErrors } from '../../utils/classnames';\nimport { IDefaultContainer2SlotsData } from './default-container-2-slots.data';\nimport { IDefaultContainer2SlotsProps } from './default-container-2-slots.props.autogenerated';\n\ninterface IColSizes {\n left: string[];\n right: string[];\n}\n\n/**\n * Default container that displays 2 modules\n * CoreComponent component\n * @extends {React.PureComponent>}\n */\nclass Default2SlotContainer extends React.PureComponent> {\n constructor(props: IDefaultContainer2SlotsProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, context, config, data } = this.props;\n telemetry.log(LogLevel.Debug, \"Default 2 Slot Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n\n const content = slots && slots.content;\n const slotsClassNames = this._getColClassName();\n if (content && content.length > 2) {\n telemetry.log(LogLevel.Warning, 'Default 2 Slot Container passed more than 2 slots');\n }\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n return (\n \n {heading && }\n {content && content[0] &&
{content[0]}
}\n {content && content[1] &&
{content[1]}
}\n <>\n {showErrors(context) &&\n content &&\n content.slice(2, content.length - 1).map((slot: ReactNode, index: number) => {\n return (\n
\n
\n
\n Slot exceeded maximum number of slots supported by container. (2)\n
\n
\n
\n );\n })}\n \n \n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n /**\n * Captures left and right column classnames from this.props.config. Returns col if no options specified.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _getColClassName = (): IColSizes => {\n const { config } = this.props;\n\n const classNames = getColClassArray(config);\n\n if (!classNames.length) {\n return {\n left: ['col'],\n right: ['col']\n };\n }\n\n return classNames.reduce(\n (memo: IColSizes, [left, right]: string[]) => {\n memo.left.push(left);\n memo.right.push(right);\n return memo;\n },\n { left: [], right: [] }\n );\n };\n}\n\nexport default Default2SlotContainer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport React, { ReactNode } from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { getColClassArray, showErrors } from '../../utils/classnames';\nimport { IDefaultContainer3SlotsData } from './default-container-3-slots.data';\nimport { IDefaultContainer3SlotsProps } from './default-container-3-slots.props.autogenerated';\n\ninterface IColSizes {\n left: string[];\n center: string[];\n right: string[];\n}\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent>}\n */\nclass Default3SlotContainer extends React.PureComponent> {\n constructor(props: IDefaultContainer3SlotsProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, context, config, data } = this.props;\n\n const slotsClassNames = this._getColClassName();\n const content = slots && slots.content;\n\n telemetry.log(LogLevel.Debug, \"Default 3 Slot Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n if (content && content.length > 3) {\n telemetry.log(LogLevel.Warning, 'Default 3 Slot Container passed more than 3 slots');\n }\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n return (\n \n {heading && }\n {content && content[0] &&
{content[0]}
}\n {content && content[1] &&
{content[1]}
}\n {content && content[2] &&
{content[2]}
}\n <>\n {showErrors(context) &&\n content &&\n content.slice(2, content.length - 1).map((slot: ReactNode, index: number) => {\n return (\n
\n
\n
\n Slot exceeded maximum number of slots supported by container. (3)\n
\n
\n
\n );\n })}\n \n \n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n /**\n * Captures left and right column classnames from this.props.config. Returns col if no options specified.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _getColClassName = (): IColSizes => {\n const { config } = this.props;\n\n const classNames = getColClassArray(config);\n\n if (!classNames.length) {\n return {\n left: ['col'],\n center: ['col'],\n right: ['col']\n };\n }\n\n return classNames.reduce(\n (memo: IColSizes, [left, center, right]: string[]) => {\n memo.left.push(left);\n memo.center.push(center);\n memo.right.push(right);\n return memo;\n },\n { left: [], center: [], right: [] }\n );\n };\n}\n\nexport default Default3SlotContainer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent } from '@msdyn365-commerce/core';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport * as React from 'react';\nimport { Container, HeadingComponent, IHeadingComponentProps } from '../../components/base-components';\nimport { colWidths } from '../../utils/classnames';\nimport { IDefaultContainerData } from './default-container.data';\nimport { childrenWidth as childrenWidthEnum, IDefaultContainerProps, layout as layoutEnum } from './default-container.props.autogenerated';\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent>}\n */\nclass DefaultContainer extends React.PureComponent> {\n constructor(props: IDefaultContainerProps) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, config, data } = this.props;\n telemetry.log(LogLevel.Debug, \"Default Container rendering for '{id}/{typeName}'\", {\n values: [this.props.id, this.props.typeName]\n });\n\n const heading = config.heading || data.heading;\n const headingProps: IHeadingComponentProps = {\n ...heading,\n handleTextChange: this.handleTextChange,\n requestContext: this.props.context.request\n };\n\n return (\n \n {heading && }\n {slots &&\n slots.content &&\n slots.content.map((children: React.ReactNode, index: number) => {\n return (\n
\n {children}\n
\n );\n })}\n \n );\n }\n\n public handleTextChange = (event: ContentEditableEvent) => (this.props.config.heading!.headingText = event.target.value);\n\n private _getChildColClassName(): string {\n const {\n config: { layout, childrenWidth }\n } = this.props;\n switch (layout) {\n case layoutEnum.flow:\n return childrenWidth === childrenWidthEnum.auto ? 'col-12 col-md' : this._getWidthClass(childrenWidth);\n case layoutEnum.stacked:\n default:\n return 'col-12';\n }\n }\n\n private _getWidthClass(s?: childrenWidthEnum): string {\n return colWidths.get(s || childrenWidthEnum.four) || 'col-12';\n }\n}\n\nexport default DefaultContainer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { SDK_FRAGMENT_NAME, msdyn365Commerce } from '@msdyn365-commerce/core-internal';\nimport * as path from 'path';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultExternalScriptProps } from './default-external-script.props.autogenerated';\n\n/**\n *\n * DefaultExternalScript component\n * @extends {React.PureComponent>}\n */\nclass DefaultExternalScript extends React.PureComponent> {\n constructor(props: IDefaultExternalScriptProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n logDebug(`Adding script tags for '${this.props.id}/${this.props.typeName}'`, this.props.telemetry);\n let source = config.scriptSource;\n\n let relativeBaseUrl: string = '';\n // Construct the relative base url, i.e. the base url from which statics will be served\n if (this.props.context) {\n relativeBaseUrl += this.props.context.request.url.staticCdnUrl;\n relativeBaseUrl += msdyn365Commerce.getEnvironmentVariable('SUBMISSIONID') || '';\n }\n\n if (isRelativeUrl(source)) {\n // If the source is a relative URL prepend the relative base url to the resolved source url for the actual source\n source = `${relativeBaseUrl}/${path.join(source)}`;\n } else if (source === '' || !isAbsoluteUrl(source)) {\n logError(\n 'Invalid external script - not a url. The external source is not an external or relative url, please use default-inline-script if you wish to load inline scripts',\n this.props.telemetry\n );\n return null;\n }\n const scriptHtml = ``;\n\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultExternalScript;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineScriptProps } from './default-inline-script.props.autogenerated';\n\n/**\n *\n * DefaultScript\n * @extends {React.PureComponent>}\n */\nclass DefaultInlineScript extends React.PureComponent> {\n constructor(props: IDefaultInlineScriptProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n logDebug(`Adding script tags for '${this.props.id}/${this.props.typeName}'`, this.props.telemetry);\n const source = config.inlineScript;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError(\n 'Invalid inline script - Empty inline source defined or a url is being used as a source. Use default-external-script to load scripts from an external or relative url.',\n this.props.telemetry\n );\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline script - inline script should not contain html tags', this.props.telemetry);\n return null;\n }\n\n const nonceToken = this.props.context && isNonceEnabled(this.props.context.request);\n const scriptHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\n }\n}\n\nexport default DefaultInlineScript;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport { IDefaultMetatagsData } from './default-metatags.data';\nimport { IDefaultMetatagsProps } from './default-metatags.props.autogenerated';\n\n/**\n *\n * DefaultPageSummaryMetadata component\n * @extends {React.PureComponent>}\n */\nclass DefaultMetaTags extends React.PureComponent> {\n public render(): JSX.Element {\n const { data, config } = this.props;\n const nonceToken = this.props.context && isNonceEnabled(this.props.context.request);\n let metaTagsHtml: string = '';\n let metaTags;\n if (config.metaTags) {\n metaTags = nonceToken ? this._addNonceToInlineScript(config.metaTags, nonceToken) : config.metaTags;\n metaTagsHtml = metaTags && metaTags.join('\\n');\n } else if (data.metaTags) {\n metaTags = data.metaTags;\n let metaTagsText = metaTags.map(simpleText => simpleText.text);\n metaTagsText = nonceToken ? this._addNonceToInlineScript(metaTagsText, nonceToken) : metaTagsText;\n metaTagsHtml = metaTagsText && metaTagsText.join('\\n');\n }\n return React.createElement(SDK_FRAGMENT_NAME, { key: this.props.id, dangerouslySetInnerHTML: { __html: metaTagsHtml } });\n }\n\n private _addNonceToInlineScript(metaTags: string[], nonceToken: string): string[] {\n const inlineScripRegex = /(.*?)<\\/script>/g;\n return metaTags\n .map(metaTag => {\n if (inlineScripRegex.test(metaTag)) {\n return metaTag.replace(/