{"version":3,"file":"static/js/21.04be1f6ba449cc1b140b.chunk.js","mappings":"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","sources":["webpack://lds-commerce/./src/modules/lds-terms-and-conditions/lds-terms-and-conditions.tsx?f29f","webpack://lds-commerce/./src/modules/lds-terms-and-conditions/lds-terms-and-conditions.view.tsx?41ce","webpack://lds-commerce/./src/themes/fabrikam/views/components/price.component.tsx?fc53","webpack://lds-commerce/./src/modules/default-external-script/default-external-script.tsx?2a33","webpack://lds-commerce/./src/modules/default-inline-script/default-inline-script.tsx?5ccd","webpack://lds-commerce/./src/modules/default-inline-style/default-inline-style.tsx?3552","webpack://lds-commerce/./src/utils/script-utils.ts?cb52","webpack://lds-commerce/./src/modules/html-block/html-block.tsx?c080","webpack://lds-commerce/./src/modules/html-block/html-block.view.tsx?b072","webpack://lds-commerce/./src/modules/product-page-summary/product-page-summary.tsx?2924","webpack://lds-commerce/./src/modules/spacer/spacer.tsx?7565","webpack://lds-commerce/./src/modules/spacer/spacer.view.tsx?1f15","webpack://lds-commerce/./src/modules/text-block/text-block.tsx?db84","webpack://lds-commerce/./src/modules/text-block/text-block.view.tsx?9307"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { ILdsTermsAndConditionsData } from './lds-terms-and-conditions.data';\r\nimport { ILdsTermsAndConditionsProps } from './lds-terms-and-conditions.props.autogenerated';\r\n\r\nexport interface ILdsTermsAndConditionsViewProps extends ILdsTermsAndConditionsProps {}\r\n\r\n/**\r\n *\r\n * LdsFooter component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass LdsTermsAndConditions extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default LdsTermsAndConditions;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { ILdsTermsAndConditionsViewProps } from './lds-terms-and-conditions';\r\nimport { lDSPublisherPolicyAsync } from '../../actions/DataActionExtension.g';\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const [currentPolicyData, setCurrentPolicyData] = React.useState();\r\n\r\n const getPolicy = async () => {\r\n const ctx = { callerContext: props.context.actionContext };\r\n const currentPolicy =\r\n props.context.request.query && props.context.request.query.policy\r\n ? props.context.request.query.policy\r\n : 'Sales & Refund Terms and Conditions';\r\n\r\n const findPolicy = await lDSPublisherPolicyAsync(ctx, currentPolicy);\r\n\r\n if (findPolicy) {\r\n setCurrentPolicyData(findPolicy);\r\n }\r\n\r\n return findPolicy;\r\n };\r\n\r\n React.useEffect(() => {\r\n void getPolicy();\r\n }, [props.data]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ContentBlockView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { getCountryLanguageAsync } from '../../../../actions/DataActionExtension.g';\r\nimport * as React from 'react';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n localCurrency?: boolean;\r\n countryRegion?: string;\r\n customMaxAmount?: number | null;\r\n customMinAmount?: number | null;\r\n customSetAmount?: number | null;\r\n isReady?: boolean;\r\n}\r\nexport interface IPriceComponent extends IComponent {\r\n localCurrency?: boolean;\r\n countryRegion?: string;\r\n customMaxAmount?: number | null;\r\n customMinAmount?: number | null;\r\n customSetAmount?: number | null;\r\n}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n const [cart, setCart] = React.useState();\r\n const [countries, setCountries] = React.useState();\r\n const [currency, setCurrency] = React.useState();\r\n\r\n const getCart = async () => {\r\n const cart = await getCartState(props.context.actionContext);\r\n setCart(cart);\r\n props.isReady = true;\r\n return cart;\r\n };\r\n const getCurrecy = async () => {\r\n const ctx = { callerContext: props.context.actionContext };\r\n const countries = await getCountryLanguageAsync(ctx, props.context.actionContext.requestContext.channel!.RecordId, 'en-us');\r\n setCountries(countries);\r\n return countries;\r\n };\r\n let storageCheck;\r\n React.useEffect(() => {\r\n getCart();\r\n getCurrecy();\r\n storageCheck = sessionStorage.getItem('currencyDecimal');\r\n setCurrency(storageCheck);\r\n }, [props.data.price.CustomerContextualPrice]);\r\n let currentCountry: any;\r\n if (cart && cart.cart && cart.cart.ExtensionProperties) {\r\n currentCountry = cart ? cart.cart.ExtensionProperties?.find((x: any) => x.Key === 'Country')?.Value.StringValue : '';\r\n }\r\n let countryData;\r\n if (countries && countries.length > 1) {\r\n countryData = countries.filter((country: any) => {\r\n return country.countryRegionId === currentCountry;\r\n });\r\n }\r\n let currencyDecimal;\r\n if (countryData && countryData[0]) {\r\n currencyDecimal =\r\n //@ts-ignore\r\n countryData[0].ExtensionProperties[7].Value?.StringValue === countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? undefined\r\n : //@ts-ignore\r\n countryData[0].ExtensionProperties[6].Value?.DecimalValue / 100;\r\n }\r\n\r\n // if (this.state.isCustomPriceSelected && newPrice) {\r\n // newPrice.CustomerContextualPrice = customPrice;\r\n // }\r\n let shouldShowLocalCurrency = false;\r\n let currentCountryRegion =\r\n countryData && countryData[0] && countryData[0].ExtensionProperties && countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? countryData[0].ExtensionProperties[8].Value?.StringValue\r\n : null;\r\n if (\r\n currencyDecimal &&\r\n props.context.request.telemetryPageName !== 'CartPage' &&\r\n props.context.request.telemetryPageName !== 'CheckoutPage' &&\r\n props.context.request.telemetryPageName !== 'orderconfirmation' &&\r\n props.context.request.telemetryPageName !== 'OrderDetails'\r\n ) {\r\n shouldShowLocalCurrency = true;\r\n } else {\r\n currentCountryRegion =\r\n countryData && countryData[0] && countryData[0].ExtensionProperties && countryData[0].ExtensionProperties[8].Value?.StringValue\r\n ? countryData[0].ExtensionProperties[7].Value?.StringValue\r\n : null;\r\n }\r\n if (currency) {\r\n props.countryRegion = currency;\r\n }\r\n if (currentCountryRegion) {\r\n if (storageCheck !== currentCountryRegion) {\r\n sessionStorage.setItem('currencyDecimal', currentCountryRegion);\r\n }\r\n props.countryRegion = storageCheck ? storageCheck : currentCountryRegion;\r\n let maxPriceCopy = props.data.price.MaxVariantPrice || 0;\r\n const customMaxAmount = props.data.price.MaxVariantPrice && currencyDecimal ? (maxPriceCopy *= currencyDecimal) : null;\r\n let minPriceCopy = props.data.price.MinVariantPrice || 0;\r\n const customMinAmount = props.data.price.MinVariantPrice && currencyDecimal ? (minPriceCopy *= currencyDecimal) : null;\r\n let adjustedPriceCopy = props.data.price.AdjustedPrice || 0;\r\n const customSetAmount = props.data.price.AdjustedPrice && currencyDecimal ? (adjustedPriceCopy *= currencyDecimal) : null;\r\n props.customMaxAmount = customMaxAmount;\r\n props.customMinAmount = customMinAmount;\r\n props.customSetAmount = customSetAmount;\r\n props.localCurrency = shouldShowLocalCurrency;\r\n props.isPriceMinMaxEnabled = true;\r\n props.isReady = true;\r\n }\r\n // CustomerContextualPrice could be zero\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {/* {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)} */}\r\n {renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\n// @ts-ignore\r\n// const showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n// const originalPrice = getOriginalPrice(props);\r\n// if (\r\n// props.isPriceMinMaxEnabled &&\r\n// props.data.price.MaxVariantPrice &&\r\n// props.data.price.MinVariantPrice &&\r\n// props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n// ) {\r\n// return props.data.price.MinVariantPrice < originalPrice;\r\n// }\r\n\r\n// if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n// return originalPrice > props.data.price.CustomerContextualPrice;\r\n// }\r\n\r\n// return false;\r\n// };\r\n\r\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\r\n};\r\n\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined, shouldUseFreePriceText: boolean | undefined): string => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const initialPrice: string = formatCurrency(props, props.data.price.CustomerContextualPrice, true);\r\n const maxVariantPrice: string = formatCurrency(props, props.data.price.MaxVariantPrice, false);\r\n const minVariantPrice: string = formatCurrency(props, props.data.price.MinVariantPrice, false);\r\n\r\n let containsCurrencyLettersCheck: any;\r\n let containsCurrencySymbolsCheck: any;\r\n\r\n let currencyType: any = '';\r\n\r\n const currencySymbols = [\r\n '$',\r\n '€',\r\n '£',\r\n '¥',\r\n '₣',\r\n '₹',\r\n 'د.ك',\r\n 'د.إ',\r\n '﷼‎',\r\n '₻',\r\n '₽',\r\n '₾',\r\n '₺',\r\n '₼',\r\n '₸',\r\n '₴',\r\n '₷',\r\n '฿',\r\n '원',\r\n '₫',\r\n '₮',\r\n '₯',\r\n '₱',\r\n '₳',\r\n '₵',\r\n '₲',\r\n '₪',\r\n '₰'\r\n ];\r\n const containsCurrencySymbol = (inputString: any) => {\r\n for (const char of inputString) {\r\n if (currencySymbols.includes(char)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n function containsCurrencyLetters(inputString: any) {\r\n const regexPattern = new RegExp(`[A-Za-z]`);\r\n return regexPattern.test(inputString);\r\n }\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n let newMinPrice;\r\n let newMaxPrice;\r\n if (props.countryRegion) {\r\n if (minVariantPrice.includes(props.countryRegion)) {\r\n newMinPrice = minVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? minVariantPrice.replace(props.countryRegion, '')\r\n : minVariantPrice;\r\n newMaxPrice = maxVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? maxVariantPrice.replace(props.countryRegion, '')\r\n : maxVariantPrice;\r\n } else {\r\n newMinPrice = minVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? minVariantPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : minVariantPrice;\r\n newMaxPrice = maxVariantPrice.includes(props.countryRegion.slice(0, -1))\r\n ? maxVariantPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : maxVariantPrice;\r\n }\r\n }\r\n if (newMinPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(newMinPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newMinPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(newMinPrice);\r\n } else if (newMaxPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(newMaxPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newMaxPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(newMaxPrice);\r\n }\r\n\r\n if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === true && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n } else if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === false && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n }\r\n return (\r\n \r\n {' '}\r\n \r\n {!props.localCurrency && newMinPrice && `${newMinPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customMinAmount &&\r\n `${props.customMinAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customMinAmount &&\r\n `${props.data.price.MinVariantPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n \r\n \r\n {props.isReady && props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {!props.localCurrency && props.isReady && newMaxPrice && `${newMaxPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customMaxAmount &&\r\n `${props.customMaxAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customMaxAmount &&\r\n `${props.data.price.MaxVariantPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {' '}\r\n \r\n );\r\n }\r\n let newInitialPrice;\r\n if (props.countryRegion) {\r\n if (initialPrice.includes(props.countryRegion)) {\r\n newInitialPrice = initialPrice.includes(props.countryRegion.slice(0, -1))\r\n ? initialPrice.replace(props.countryRegion, '')\r\n : initialPrice;\r\n } else {\r\n newInitialPrice = initialPrice.includes(props.countryRegion.slice(0, -1))\r\n ? initialPrice.replace(props.countryRegion.slice(0, -1), '')\r\n : initialPrice;\r\n }\r\n }\r\n if (initialPrice) {\r\n // containsCurrencyLettersCheck = containsCurrencySymbol(initialPrice);\r\n containsCurrencyLettersCheck = containsCurrencyLetters(newInitialPrice);\r\n containsCurrencySymbolsCheck = containsCurrencySymbol(initialPrice);\r\n }\r\n\r\n if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === true && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n } else if (containsCurrencyLettersCheck === false && containsCurrencySymbolsCheck === false && props.countryRegion) {\r\n currencyType = props.countryRegion;\r\n }\r\n\r\n return (\r\n \r\n {!props.localCurrency && newInitialPrice && `${newInitialPrice} ${currencyType}`}\r\n {props.localCurrency &&\r\n props.isReady &&\r\n props.customSetAmount &&\r\n `${props.customSetAmount.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n {props.localCurrency &&\r\n !props.customSetAmount &&\r\n props.data.price.CustomerContextualPrice &&\r\n `${props.data.price.CustomerContextualPrice.toFixed(2)} ${props.countryRegion ? props.countryRegion : ''}`}\r\n \r\n );\r\n};\r\n// @ts-ignore\r\n// const renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n// const originalPrice: number = getOriginalPrice(props);\r\n// const initialPrice: string = formatCurrency(props, originalPrice, true);\r\n\r\n// return (\r\n// <>\r\n// \r\n// {' '}\r\n// {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n// \r\n// \r\n// \r\n// {props.savingsText && {props.savingsText}}\r\n// \r\n// );\r\n// };\r\n\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'Price',\r\n { component: Price, ...priceComponentActions }\r\n);\r\n\r\nexport default PriceComponent;\r\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 { SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\nimport * as React from 'react';\nimport { isAbsoluteUrl, isRelativeUrl, logDebug, logError } from '../../utils/script-utils';\nimport { IDefaultInlineStyleProps } from './default-inline-style.props.autogenerated';\n\n/**\n *\n * DefaultStyle\n * @extends {React.PureComponent>}\n */\n\nconst DefaultInlineStyle = (props: IDefaultInlineStyleProps<{}>) => {\n const { config, id, typeName, telemetry } = props;\n logDebug(`Adding style tags for '${id}/${typeName}'`, telemetry);\n const source = config.inlineStyle;\n\n if (!source || source === '' || isAbsoluteUrl(source) || isRelativeUrl(source)) {\n logError('Invalid inline style - Empty inline source defined or a url is being used as a source.', telemetry);\n return null;\n }\n\n if (source.includes('')) {\n logError('Invalid inline style - inline style should not contain html tags', telemetry);\n return null;\n }\n\n const styleHtml = ``;\n return React.createElement(SDK_FRAGMENT_NAME, { key: id, dangerouslySetInnerHTML: { __html: styleHtml } });\n};\n\nexport default DefaultInlineStyle;\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 // eslint-disable-next-line security/detect-unsafe-regex\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 * as React from 'react';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\n\nimport { IHtmlBlockProps } from './html-block.props.autogenerated';\n\nexport interface IHtmlBlockViewProps extends IHtmlBlockProps<{}> {\n content?: React.ReactNode;\n className?: string;\n}\n\n/**\n *\n * HtmlBlock component\n * @extends {React.PureComponent>}\n */\nclass HtmlBlock extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { content, className } = this.props.config;\n const text = content && (\n \n );\n const htmlBlockViewProps = {\n ...this.props,\n content: text,\n className: classnames('ms-html-block', className)\n };\n return this.props.renderView(htmlBlockViewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.content = event.target.value);\n}\n\nexport default HtmlBlock;\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';\nimport { IHtmlBlockViewProps } from './html-block';\n\nconst HtmlBlockView: React.FC = props => (\n
\n {props.content}\n
\n);\n\nexport default HtmlBlockView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { HtmlHeadInclude, IAny, IGeneric } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nimport { IProductPageSummaryData } from './product-page-summary.data';\nimport { IProductPageSummaryProps } from './product-page-summary.props.autogenerated';\n\n/**\n *\n * ProductPageSummary component.\n * @extends {React.PureComponent}\n */\nclass ProductPageSummary extends React.PureComponent> {\n public render(): JSX.Element {\n if (this.props.data.productPageSummary.result === undefined) {\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\n }\n let {\n data: {\n productPageSummary: {\n result: { title, description, keywords, sharingImageUrl, faviconUrl }\n }\n }\n } = this.props;\n\n const {\n config,\n context,\n data: {\n productPageSummary: {\n result: { canonicalUrl, productId, productBrand, price }\n }\n }\n } = this.props;\n\n // Product SEO metadata specific information - non-overridable\n const productName = title;\n const productDescription = description;\n const productImageUrl = sharingImageUrl;\n\n // Override values coming from data action if config values are provided\n title = config.title || title;\n description = config.description || description;\n keywords = config.keywords || keywords;\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\n faviconUrl = config.faviconUrl || faviconUrl;\n\n // Construct page title with suffix and prefix if provided from app settings\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\n return (\n <>\n \n {pageTitle && {pageTitle}}\n {description && }\n {keywords && }\n {canonicalUrl && }\n {faviconUrl && }\n \n {this._renderProductMetadata(\n productName,\n productDescription,\n productImageUrl,\n canonicalUrl,\n productId,\n price,\n context.request.channel?.Currency,\n productBrand\n )}\n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\n \n );\n }\n\n /**\n * Renders the facebook and other social media specific metadata tags.\n *\n * @param title Page title.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n */\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\n return (\n \n {title && }\n {description && }\n {sharingImageUrl && }\n \n \n );\n }\n\n /**\n * Constructs and renders the JSON-LD tag used to output product specific metadata used by search engine crawlers.\n *\n * @param productName Product name.\n * @param description Product description.\n * @param sharingImageUrl Primary product image url.\n * @param canonicalUrl Product canonical url.\n * @param productId Master product id.\n * @param price Proudct price.\n * @param currencyCode Current channel currency code.\n * @param productBrand Product brand.\n */\n private _renderProductMetadata(\n productName: string | undefined,\n description: string | undefined,\n sharingImageUrl: string | undefined,\n canonicalUrl: string | undefined,\n productId: number | undefined,\n price: number | undefined,\n currencyCode: string | undefined,\n productBrand: string | undefined\n ): JSX.Element {\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\n const productMetaData = JSON.stringify({\n '@context': 'http://schema.org',\n '@type': 'Product',\n name: productName,\n description,\n image: sharingImageUrl,\n sku: productId,\n brand: {\n '@type': 'Brand',\n name: productBrand\n },\n offers: {\n '@type': 'Offer',\n url: canonicalUrl,\n priceCurrency: currencyCode,\n price\n }\n });\n return (\n \n {/* eslint-disable-next-line react/no-danger -- Implementation is a copy.*/}\n