{"version":3,"sources":["webpack:///src/actions/getById-product-telemetry.action.ts?3e17","webpack:///src/modules/place-holder-for-container-preview/place-holder-for-container-preview.tsx?b150","webpack:///src/actions/purchase-telemetry.action.ts?c1a6","webpack:///src/utils/classnames.ts?8f2b","webpack:///src/modules/default-container-2-slots/default-container-2-slots.tsx?b218","webpack:///src/modules/default-page/default-page.tsx?0e08","webpack:///src/actions/getVariantsByDimensionValues-telemetry.action.ts?acda","webpack:///src/utils/script-utils.ts?9534","webpack:///src/actions/addToCart-telemetry.action.ts?ceef","webpack:///src/modules/default-inline-script/default-inline-script.tsx?3ed3","webpack:///src/modules/default-metatags/default-metatags.tsx?1bb4","webpack:///src/modules/default-external-script/default-external-script.tsx?203d","webpack:///src/actions/removeFromCart-telemetry.action.ts?f9cf","webpack:///src/components/base-components.tsx?5f88","webpack:///src/actions/copyCart-checkOut-telemetry.action.ts?b241","webpack:///src/actions/telemetry.action.helper.ts?4cd3","webpack:///src/actions/getByIds-product-telemetry.action.ts?a77c","webpack:///src/actions/readCart-telemetry.action.ts?562f","webpack:///src/actions/updateCart-telemetry.action.ts?2995","webpack:///src/modules/default-container-3-slots/default-container-3-slots.tsx?06cd","webpack:///src/modules/default-container/default-container.tsx?4334","webpack:///src/modules/script-injector/script-injector.tsx?fad8"],"names":["actionId","postReaderHook","async","_inputs","simpleProduct","actionContext","Promise","resolve","Array","isArray","productInfo","requestContext","telemetryData","productSku","ProductPageView","preReaderHook","salesOrder","_msdyn365","window","telemetry","Purchase","logEvent","sizePattern","getColumnSizes","config","size","exec","cols","split","slice","translatedSize","prefix","toLowerCase","translatePrefix","sizePrefix","map","colWidth","showErrors","context","isDebug","isEditor","request","params","getColClassArray","options","xsmall","small","medium","large","filter","Boolean","colWidths","Map","PureComponent","props","super","handleTextChange","event","this","heading","headingText","target","value","_getColClassName","classNames","length","reduce","memo","left","right","push","slots","data","log","Debug","values","id","typeName","content","slotsClassNames","Warning","headingProps","containerType","className","join","slot","index","key","skipToMainText","app","platform","href","tabIndex","header","children","subheader","primary","subfooter","footer","simpleProducts","forEach","product","logDebug","debugMessage","logError","errorMessage","Error","isAbsoluteUrl","source","test","isRelativeUrl","cart","addedProducts","addedCartLines","cartLine","ProductId","addedProduct","AddToCart","inputs","actionInput","queryParams","addCartLinesParams","cartLines","debug","e","inlineScript","includes","nonceToken","scriptHtml","dangerouslySetInnerHTML","__html","metaTags","metaTagsHtml","_addNonceToInlineScript","metaTagsText","simpleText","text","inlineScripRegex","metaTag","replace","scriptSource","relativeBaseUrl","url","staticCdnUrl","defer","removeCartLineIds","removedCartLineIds","activeCart","productTransaction","removedCartLines","CartLines","indexOf","LineId","products","some","RemoveFromCart","removeCartLinesParams","cartLineIds","getContainerType","Container","customClassName","HeadingComponent","tag","textSize","Tag","classNameWithHeading","editProps","onEdit","cartObject","cartLineProductUnits","cartLineitem","productChannelId","ChannelId","toString","productChannelName","productCategoryId","productCategoryName","productId","productName","productPrice","Price","productQuantity","Quantity","productCurrency","channel","Currency","CheckOut","cartId","Id","cartVersion","Version","orderId","OrderNumber","getProductInfoFromCart","productData","_getProductInfoFromCartLines","getProductTransactionInfoFromSalesOrder","affiliation","revenue","NetAmountWithoutTax","tax","TaxAmount","_getProductInfoFromSalesLines","salesObject","saleLineProductUnits","SalesLines","saleLineitem","getProductInfoFromSimpleProduct","recordId","RecordId","MasterProductId","Name","Description","updatedProducts","updatedCartLines","updatedProduct","UpdateInCart","updateCartLinesParams","center","_getChildColClassName","layout","childrenWidth","_getWidthClass","s","get","_debug","placeHolderPropsRegEx","RegExp","placeHolders","originalSource","resolvedSource","hasMorePlaceHolders","_resolvePlaceHolder","_isUrl","src","loadPoint","placeHolderToken","placeHolderTokens","propertyContext","propertyName","user","query"],"mappings":"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","file":"static/js/18.f8ec288bfb33761b.chunk.js","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 { 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, actionContext.requestContext);\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 { PlaceholderForContainerPreviewComponent } from '@msdyn365-commerce/core';\n\nexport default PlaceholderForContainerPreviewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductTransactionInfoFromSalesOrder } from './telemetry.action.helper';\n\nconst beforePurchase = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterPurchase = async (\n _inputs: IActionInput | IActionInput[],\n salesOrder: SalesOrder | SalesOrder[],\n actionContext: IActionContext\n) => {\n const _msdyn365 = window && (window)._msdyn365;\n\n if (_msdyn365 && _msdyn365.telemetry) {\n // store the purchased product information so that we can avoid \"code triggered\" remove from cart telemetry event.\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase] = getProductTransactionInfoFromSalesOrder(\n salesOrder,\n actionContext.requestContext.telemetryData\n );\n\n _msdyn365.telemetry.logEvent(TelemetryEvent.Purchase, actionContext.requestContext.telemetryData[TelemetryEvent.Purchase]);\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 { ICoreContext } from '@msdyn365-commerce/core';\nimport * as twoSlots from '../modules/default-container-2-slots/default-container-2-slots.props.autogenerated';\nimport * as threeSlots from '../modules/default-container-3-slots/default-container-3-slots.props.autogenerated';\n\nconst sizePattern = /col(_(\\d|auto){1,2}){2,}/;\n\nexport interface IShowErrorOptions {\n isDebug?: boolean;\n isEditor?: boolean;\n}\n\nexport interface IViewPortOptions {\n xsmall?: threeSlots.xsmall | twoSlots.xsmall;\n small?: threeSlots.small | twoSlots.small;\n medium?: threeSlots.medium | twoSlots.medium;\n large?: threeSlots.large | twoSlots.large;\n}\n\nconst translatePrefix = (prefix: `large` | `medium` | `small` | `xsmall` | undefined) => {\n switch (prefix && prefix.toLowerCase()) {\n case 'large':\n return 'lg';\n case 'medium':\n return 'md';\n case 'small':\n return 'sm';\n case 'xsmall':\n default:\n return '';\n }\n};\n\n/**\n * converts config option and size to bootstrap col class name\n * If size is auto or config option is invalid col-auto will be returned\n * If size is xsmall or size is invalid col-{config} will be returned\n * @param config configuration option e.g. col_12_12\n * @param size bootstrap gridsize\n */\nexport const getColumnSizes = (config: string, size?: `large` | `medium` | `small` | `xsmall`): string[] | boolean => {\n if (!sizePattern.exec(config)) {\n return false;\n }\n const cols = config.split('_').slice(1);\n const translatedSize = translatePrefix(size);\n const sizePrefix = (translatedSize && `-${translatedSize}`) || '';\n return cols.map((colWidth: string) => `col${sizePrefix}-${colWidth}`);\n};\n\nexport const showErrors = (context?: ICoreContext): Boolean => {\n const { isDebug, isEditor }: IShowErrorOptions = (context && context.request && context.request.params) || {};\n return !!isDebug || !!isEditor;\n};\n\n/**\n * Converts viewport configuration into a two dimensional array of class names\n */\nexport const getColClassArray = (options: IViewPortOptions): string[][] =>\n (\n [\n options.xsmall && getColumnSizes(options.xsmall),\n options.small && getColumnSizes(options.small, 'small'),\n options.medium && getColumnSizes(options.medium, 'medium'),\n options.large && getColumnSizes(options.large, 'large')\n ].filter(Boolean)\n );\n\nexport const colWidths = new Map([\n ['one', 'col-md-1'],\n ['two', 'col-md-2'],\n ['three', 'col-md-3'],\n ['four', 'col-md-4'],\n ['six', 'col-md-6'],\n ['twelve', 'col-md-12']\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 { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport * as React from 'react';\nimport { IDefaultPageProps } from './default-page.props.autogenerated';\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent}\n */\nclass DefaultPageContainer extends React.PureComponent> {\n constructor(props: IDefaultPageProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element {\n const { slots, telemetry, id, typeName } = this.props;\n\n let skipToMainText = this.props.config && this.props.config.skipToMainText;\n telemetry.log(LogLevel.Debug, \"DefaultPageContainer rendering for '{id}/{typeName}'\", { values: [id, typeName] });\n\n if (!skipToMainText) {\n skipToMainText =\n this.props.context.app && this.props.context.app.platform ? this.props.context.app.platform.skipToMainText : '';\n }\n\n return (\n \n \n {skipToMainText}\n \n
\n {slots &&\n slots.header &&\n slots.header.map((children: React.ReactNode) => {\n return children;\n })}\n
\n {slots && slots.subheader && (\n
\n {slots.subheader.map((children: React.ReactNode) => {\n return children;\n })}\n
\n )}\n
\n {slots &&\n slots.primary &&\n slots.primary.map((children: React.ReactNode) => {\n return children;\n })}\n
\n {slots && slots.subfooter && (\n
\n {slots.subfooter.map((children: React.ReactNode) => {\n return children;\n })}\n
\n )}\n
\n {slots &&\n slots.footer &&\n slots.footer.map((children: React.ReactNode) => {\n return children;\n })}\n
\n
\n );\n }\n}\n\nexport default DefaultPageContainer;\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, actionContext.requestContext);\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 { IInternalTelemetry, LogLevel } from '@msdyn365-commerce/telemetry-internal';\n\nexport const logDebug = (debugMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Debug, debugMessage);\n};\n\nexport const logError = (errorMessage: string, telemetry: IInternalTelemetry | undefined): void => {\n telemetry && telemetry.log(LogLevel.Error, errorMessage);\n};\n\n/**\n * Returns true if the given string matches an URL pattern\n *\n * @param source The string to check against\n */\nexport const isAbsoluteUrl = (source: string): boolean => {\n return /^(http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(source);\n};\n\nexport const isRelativeUrl = (source: string): boolean => {\n return /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/).*(\\.js){1}$/.test(source);\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 { IAny, IDictionary, IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IAddCartLinesParam, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCart } 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 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 addedProducts: IDictionary = {};\n const addedCartLines = actionContext.requestContext.telemetryData.addedCartLines;\n\n // If TelemetryData exists for added cart lines, collect product info\n if (addedCartLines) {\n addedCartLines.forEach((cartLine: CartLine) => {\n if (cartLine && cartLine.ProductId) {\n const addedProduct = actionContext.requestContext.telemetryData[cartLine.ProductId];\n if (addedProduct) {\n addedProducts[cartLine.ProductId] = addedProduct;\n }\n }\n });\n }\n\n // Fire AddToCart event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.AddToCart,\n getProductInfoFromCart(cart, addedProducts, actionContext.requestContext)\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 { 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(/`;\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 { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Cart, CartLine, IDataServiceRequest, IRemoveCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCart } 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 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 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\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\n // Fire RemoveFromCart event if cart lines were removed\n if (removedCartLines && removedCartLines.length > 0) {\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.RemoveFromCart,\n getProductInfoFromCart(\n { ...{}, ...cart, ...{ CartLines: removedCartLines } },\n actionContext.requestContext.telemetryData,\n actionContext.requestContext\n )\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 { ContentEditableEvent, IRequestContext, Text } from '@msdyn365-commerce/core';\nimport * as React from 'react';\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\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 { containerType, className, typeName, id, children } = props;\n const customClassName = className ? ` ${className}` : '';\n\n return containerType ? (\n
\n
{children}
\n
\n ) : (\n
{children}
\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 { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\n\ndeclare let window: IMSDyn365Window;\n\nconst beforeCopyCart = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterCopyCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n // TODO (Matt D 4/8/20): Adding product conversion here as workaround for CheckOut bug. Will revisit in user story 6963863\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const cartLineProductUnits: IProductInfo[] = [];\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n cartObject.CartLines.forEach((cartLineitem: CartLine) => {\n if (cartLineitem.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 const productInfo = actionContext.requestContext.telemetryData[cartLineitem.ProductId];\n if (productInfo) {\n cartLineProductUnits.push({\n productChannelId: cartObject.ChannelId ? cartObject.ChannelId.toString() : '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId,\n productName: productInfo.productName,\n productSku: productInfo.productSku,\n productPrice: cartLineitem.Price ? cartLineitem.Price.toString() : '',\n productQuantity: cartLineitem.Quantity ? cartLineitem.Quantity.toString() : '',\n productCurrency: actionContext.requestContext.channel ? actionContext.requestContext.channel.Currency || '' : ''\n });\n }\n }\n });\n }\n\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 { IAny, IDictionary, IRequestContext } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, SalesLine, SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ICartInfo, IProductInfo, IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * getProductInfoFromCart\n * @param cart Cart object\n * @param productData Product data\n * @param requestContext Request Context\n */\nexport const getProductInfoFromCart = (cart: Cart | Cart[], productData: IDictionary, requestContext: IRequestContext): ICartInfo => {\n // ToDo: Need to revisit this when we make sure that we can expect only one cart and not array\n cart = Array.isArray(cart) ? cart[0] : cart;\n return _getProductInfoFromCartLines(cart, productData, requestContext);\n};\n\n/**\n * _getProductInfoFromCartLines\n * @param cartObject Cart object\n * @param productData Product data\n * @param requestContext Request context\n */\nconst _getProductInfoFromCartLines = (cartObject: Cart, productData: IDictionary, requestContext: IRequestContext): ICartInfo => {\n const cartLineProductUnits: IProductInfo[] = [];\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n cartObject.CartLines.forEach((cartLineitem: CartLine) => {\n if (cartLineitem.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 const productInfo = productData[cartLineitem.ProductId];\n if (productInfo) {\n cartLineProductUnits.push({\n productChannelId: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId,\n productName: productInfo.productName,\n productSku: productInfo.productSku,\n productPrice: cartLineitem.Price ? cartLineitem.Price.toString() : '',\n productQuantity: cartLineitem.Quantity ? cartLineitem.Quantity.toString() : '',\n productCurrency: ''\n });\n }\n }\n });\n }\n\n return {\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/**\n * getProductTransactionInfoFromSalesOrder\n * @param salesOrder Sales order\n * @param productData Product data\n */\nexport const getProductTransactionInfoFromSalesOrder = (\n salesOrder: SalesOrder | SalesOrder[],\n productData: IDictionary\n): IProductTransaction => {\n // ToDo: Need to revisit this when we make sure that we can expect only one sales order and not array\n salesOrder = Array.isArray(salesOrder) ? salesOrder[0] : salesOrder;\n\n return {\n id: salesOrder.Id,\n affiliation: salesOrder.ChannelId ? salesOrder.ChannelId.toString() : '',\n revenue: salesOrder.NetAmountWithoutTax,\n tax: salesOrder.TaxAmount,\n // shippingCost?: // Confirm if it is delivery mode charge amount;\n products: _getProductInfoFromSalesLines(salesOrder, productData)\n };\n};\n\n/**\n * _getProductInfoFromSalesLines\n * @param salesObject Sales object\n * @param productData Product dat\n */\nconst _getProductInfoFromSalesLines = (salesObject: SalesOrder, productData: IDictionary): IProductInfo[] => {\n const saleLineProductUnits: IProductInfo[] = [];\n if (salesObject && salesObject.SalesLines && Array.isArray(salesObject.SalesLines) && salesObject.SalesLines.length > 0) {\n salesObject.SalesLines.forEach((saleLineitem: SalesLine) => {\n if (saleLineitem.ProductId) {\n // The product id in salesLine actually contains recordId and not master product id so we can use it up here to lookup product.\n const productInfo = productData[saleLineitem.ProductId];\n if (productInfo) {\n saleLineProductUnits.push({\n productChannelId: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId, // This is already precooked to contain master product id\n productName: productInfo.productName,\n productSku: productInfo.productSku, // This is a;ready precooked to contain record id\n productPrice: saleLineitem.Price ? saleLineitem.Price.toString() : '',\n productQuantity: saleLineitem.Quantity ? saleLineitem.Quantity.toString() : '',\n productCurrency: ''\n });\n }\n }\n });\n }\n\n return saleLineProductUnits;\n};\n\n/**\n * getProductInfoFromSimpleProduct\n * @param simpleProduct Simple product\n * @param requestContext Request context\n */\nexport const getProductInfoFromSimpleProduct = (simpleProduct: SimpleProduct, requestContext: IRequestContext): 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: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productQuantity: '',\n productCurrency: ''\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 } 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, actionContext.requestContext);\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 { 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, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { IAny, IDictionary, IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IDataServiceRequest, IUpdateCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromCart } 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 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 updatedProducts: IDictionary = {};\n const updatedCartLines = actionContext.requestContext.telemetryData.updatedCartLines;\n\n // If TelemetryData exists for updated cart lines, collect product info\n if (updatedCartLines) {\n updatedCartLines.forEach((cartLine: CartLine) => {\n if (cartLine && cartLine.ProductId) {\n const updatedProduct = actionContext.requestContext.telemetryData[cartLine.ProductId];\n if (updatedProduct) {\n updatedProducts[cartLine.ProductId] = updatedProduct;\n }\n }\n });\n }\n\n // Fire UpdateInCart event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.UpdateInCart,\n getProductInfoFromCart(cart, updatedProducts, actionContext.requestContext)\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 { 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 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 {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 * as MsDyn365 from '@msdyn365-commerce/core-internal';\nimport { LogLevel } from '@msdyn365-commerce/telemetry-internal';\nimport * as React from 'react';\nimport { IScriptInjectorProps } from './script-injector.props.autogenerated';\n\n/**\n *\n * CoreComponent component\n * @extends {React.PureComponent}\n */\nclass ScriptInjector extends React.PureComponent> {\n constructor(props: IScriptInjectorProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { config } = this.props;\n this._debug(`Adding html head tags for '${this.props.id}/${this.props.typeName}'`);\n\n const placeHolderPropsRegEx = RegExp('%[a-zA-Z0-9-.]*%', 'g');\n let placeHolders: RegExpExecArray | null;\n const originalSource = config && config.scriptSource;\n let resolvedSource;\n\n if (originalSource) {\n let hasMorePlaceHolders = true;\n resolvedSource = originalSource;\n\n while (hasMorePlaceHolders) {\n placeHolders = placeHolderPropsRegEx.exec(originalSource);\n\n if (placeHolders && placeHolders.length > 0) {\n this._debug(`extracted placeholder ${placeHolders[0]}`);\n resolvedSource = this._resolvePlaceHolder(resolvedSource, placeHolders[0]);\n } else {\n hasMorePlaceHolders = false;\n }\n }\n }\n\n if (!resolvedSource) {\n return null;\n }\n\n return (\n \n {this._isUrl(resolvedSource) ? (\n \n ) : (\n \n )}\n \n );\n }\n\n private _debug(debugMessage: string): void {\n if (this.props.telemetry) {\n this.props.telemetry.log(LogLevel.Debug, debugMessage);\n }\n }\n\n private _isUrl(source: string): boolean {\n return /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/.test(source);\n }\n\n private _resolvePlaceHolder(resolvedSource: string, placeHolderToken: string): string {\n // expect placeholder to of the format eg: %config.id%\n const placeHolderTokens = placeHolderToken.split(/[%.]/);\n\n if (placeHolderTokens.length !== 4 || !resolvedSource) {\n return resolvedSource;\n }\n\n const propertyContext = placeHolderTokens[1];\n const propertyName = placeHolderTokens[2];\n\n if (propertyContext === 'props') {\n if (this.props[propertyName]) {\n resolvedSource = resolvedSource.replace(placeHolderToken, this.props[propertyName]);\n this._debug(`Replaced placeholder ${placeHolderToken} with props property ${this.props[propertyName]}`);\n }\n } else if (this.props.context && this.props.context.request) {\n switch (propertyContext) {\n case 'request':\n if (this.props.context.request[propertyName]) {\n resolvedSource = resolvedSource.replace(placeHolderToken, this.props.context.request[propertyName]);\n this._debug(\n `Replaced placeholder ${placeHolderToken} with request property ${this.props.context.request[propertyName]}`\n );\n }\n\n break;\n case 'user':\n if (this.props.context.request.user && this.props.context.request.user[propertyName]) {\n resolvedSource = resolvedSource.replace(placeHolderToken, this.props.context.request.user[propertyName]);\n this._debug(\n `Replaced placeholder ${placeHolderToken} with user property ${this.props.context.request.user[propertyName]}`\n );\n }\n\n break;\n case 'query':\n if (this.props.context.request.query && this.props.context.request.query[propertyName]) {\n resolvedSource = resolvedSource.replace(placeHolderToken, this.props.context.request.query[propertyName]);\n this._debug(\n `Replaced placeholder ${placeHolderToken} with query parameter ${this.props.context.request.query[propertyName]}`\n );\n }\n\n break;\n default:\n }\n }\n\n return resolvedSource;\n }\n}\n\nexport default ScriptInjector;\n"],"sourceRoot":""}