{"version":3,"file":"static/js/c40fd6691af1e2be4c8a.bundle.js","mappings":";wJACO,MAAMA,EAAcC,GAEC,mIAEDC,KAAKD,GAUnBE,EAAqB,CAACC,EAAaC,KAA6B,MACzE,OAAIA,GAAsB,QAAnB,EAAIA,EAAIC,QAAQC,WAAG,OAAf,EAAiBC,OAAOC,sBACxBL,MAAAA,OAAG,EAAHA,EAAKM,QAAQ,kBAAmB,IAEpCN,GAWEO,EAAgC,CAACP,EAAaC,KAA6B,MACpF,GAAIA,GAAsB,QAAnB,EAAIA,EAAIC,QAAQC,WAAG,OAAf,EAAiBC,OAAOC,sBAAuB,OAEtD,MAAO,GAD+C,QAAzC,EAAGG,mBAAmBR,EAAIS,MAAM,MAAM,WAAG,aAAtC,EAAwCH,QAAQ,mBAAoB,QAGxF,OAAON,0HClBL,MAAOU,EAKTC,YAAYC,EAAmBC,EAAmBC,GAM3C,KAAAC,YAAc,IAAM,mBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAA0B,OAP7CC,KAAKN,UAAYA,EACjBM,KAAKL,UAAYA,EACjBK,KAAKJ,wBAA0BA,GAA2B,IA6ClE,QAAeK,EAAAA,GAAoC,CAC/CC,OAlBJC,eAAsBC,EAAgCrB,GAA4B,QAC9E,IAAIsB,EAAoC,KACxC,IAAKtB,EAAIuB,eAAerB,IAAIC,OAAOqB,2BAA4B,CAC3D,MAAMC,QAAiBC,EAAAA,EAAAA,cAAa,CAAEC,cAAe3B,GAAOqB,EAAMV,UAAWU,EAAMT,WACnFU,EAAcM,MAAMC,QAAQJ,GAAYA,EAAS,GAAKA,EAE1D,MAAMZ,EAAuD,QAAhC,EAAGQ,EAAMR,+BAAuB,QAAI,GAQjE,aAPmBiB,EAAAA,EAAAA,mCACf,CAAEH,cAAe3B,EAAK+B,oBAAqB,IAC3CT,GAA0B,QAAf,EAAIA,SAAW,OAAX,EAAaU,gBAAkBV,EAAYU,gBAAkBX,EAAMV,UAClFU,EAAMT,UACNC,IASJoB,GAAI,qBACJZ,MAjCiBa,IACjB,MAAMvB,GAAYwB,EAAAA,EAAAA,qCAAoCD,GACtD,GAAIvB,EACA,OAAO,IAAIF,GAAyBE,GAAYuB,EAAUX,eAAea,YAAYxB,UAAW,IAEhG,MAAM,IAAIyB,MAAM,uNC5BxB,MAAMC,UAA2BC,EAAAA,cAC7B7B,YAAY8B,GACRC,MAAMD,GAGHE,SAAM,QACT,QAAkDC,IAA9C1B,KAAKuB,MAAMI,KAAKC,mBAAmBC,OACnC,MAAM,IAAIT,MAAM,uFAEpB,MAAM,OACFlC,EAAM,QACN4C,EAAO,KACPH,GACA3B,KAAKuB,MACT,IAAMI,MAAQC,oBAAsBC,QAAQ,MACxCE,EAAK,YACLC,EAAW,SACXC,EAAQ,gBACRC,EAAe,WACfC,MACMnC,KAAKuB,MAGf,MAAMa,EAAcL,EAGpBA,GAAoB,QAAZ,EAAA7C,EAAO6C,aAAK,aAAZ,EAAcxC,MAAM,0BAA0B8C,KAAKD,KAAgBL,EAC3EC,GAAgC,QAAlB,EAAA9C,EAAO8C,mBAAW,aAAlB,EAAoBzC,MAAM,0BAA0B8C,KAAKD,KAAgBJ,EACvFC,EAAW/C,EAAO+C,UAAYA,EAC9BC,EAAmBhD,EAAOoD,cAAgBpD,EAAOoD,aAAaC,KAAQL,EACtEC,EAAajD,EAAOiD,YAAcA,EAGlC,MAAMK,EAAYxC,KAAKyC,oBAAoBV,EAAOD,GAAWA,EAAQ9C,SAAW8C,EAAQ9C,QAAQC,KAC1FyD,EAAMZ,EAAQ9C,QAAQ0D,IAAIC,WAC1BC,EAAY,IAAIC,gBAAgBH,EAAII,QACpCC,EAAYH,EAAUI,IAAI,aAAe,cAAcJ,EAAUI,IAAI,eAAiB,KACtFC,EAAe,GAAGP,EAAIQ,UAAS7D,EAAAA,EAAAA,IAA8BqD,MAAAA,OAAG,EAAHA,EAAKS,SAAUrB,KAAWiB,GAAwB,KACrH,OACIzB,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAC8B,EAAAA,GAAe,KACXZ,GAAalB,EAAAA,cAAAA,QAAAA,KAAQkB,GACrBR,GAAeV,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,cAAcC,QAAStB,IACjDC,GAAYX,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,WAAWC,QAASrB,IAC3CgB,GAAgB3B,EAAAA,cAAAA,OAAAA,CAAMiC,IAAI,YAAYC,KAAMP,IAC5Cd,GAAcb,EAAAA,cAAAA,OAAAA,CAAMiC,IAAI,gBAAgBC,KAAMrB,IAC9CnC,KAAKyD,uBAAuB3B,EAASH,IACpCzC,EAAOwE,eAAiB1D,KAAK2D,cAAcnB,EAAWR,EAAaE,IACnEhD,EAAO0E,oBAAsB5D,KAAK6D,mBAAmBrB,EAAWR,EAAaE,KAavFyB,cAAc5B,EAA2BC,EAAiCE,GAC9E,OACIZ,EAAAA,cAAAA,EAAAA,SAAAA,KACKS,GAAST,EAAAA,cAAAA,OAAAA,CAAMwC,SAAS,WAAWR,QAASvB,IAC5CC,GAAeV,EAAAA,cAAAA,OAAAA,CAAMwC,SAAS,iBAAiBR,QAAStB,IACxDE,GAAmBZ,EAAAA,cAAAA,OAAAA,CAAMwC,SAAS,WAAWR,QAASpB,IACvDZ,EAAAA,cAAAA,OAAAA,CAAMwC,SAAS,UAAUR,QAAQ,aAYrCG,uBAAuB3B,EAAuBH,GAAiC,kBACnF,IAAKA,EAAKC,mBAAmBC,SAAWF,EAAKoC,QAAQlC,QAAkC,QAAxB,EAACC,EAAQ9C,QAAQgF,eAAO,QAAvB,EAAyBC,SACrF,MAAM,IAAI7C,MAAM,8CAGpB,MAAM8C,EAAkBvC,EAAKoC,QAAQlC,OAAOsC,SACtCC,EAA4C,QAA9B,EAAGzC,EAAK0C,gBAAgBxC,cAAM,aAA3B,EAA6ByC,MAAMC,GAA2BA,EAAQJ,WAAaD,IACpGM,EAAsCJ,MAAAA,GAAmC,QAArB,EAAdA,EAAgBK,2BAAmB,OAA8C,QAA9C,EAAnC,EAAqCH,MAAKI,GAAqB,oBAAbA,EAAKC,aAA0B,OAAO,QAAP,EAAjF,EAAmFC,aAAK,WAA1E,EAAd,EAA0FC,aAChI,MACF9C,EAAK,YACLC,EAAW,gBACXE,EAAe,aACfe,EAAY,UACZ6B,EAAS,MACTC,EAAK,aACLC,EAAY,cACZC,EAAa,gBACbC,EAAe,kBACfC,EAAiB,UACjBC,GACAzD,EAAKC,mBAAmBC,OACtBwD,EAAevD,EAAQ9C,QAAQgF,QAAQC,SAEvCqB,GAAoBH,MAAAA,GAA8D,QAA7C,EAAjBA,EAAmBb,MAAKiB,GAAMA,EAAGC,MAAQ,GAAGtB,aAAkB,WAA7C,EAAjB,EAAgEuB,QAAS,KAC7FC,EAAqC,OAAtBJ,OAA6B5D,EAAYiE,SAASL,EAAmB,IACpFM,OAAgClE,IAAjBgE,GAA8BG,MAAMH,QACrDhE,EAAYgE,EAAe,aAAe,UAExCI,GAAYV,MAAAA,GAAsD,QAA7C,EAATA,EAAWd,MAAKiB,GAAMA,EAAGC,MAAQ,GAAGhB,aAAkB,WAA7C,EAAT,EAAwDiB,QAAS,KAC7EM,EAAqB,OAAdD,OAAqBpE,EAAYiE,SAASG,EAAW,UAAOpE,EAGnEsE,EAAkBC,KAAKC,UAAU,CAEnC,WAAY,oBACZ,QAAS,UACT,MAAOjD,EACPI,KAAMtB,EACNC,YAAaA,EACbmE,MAAOjE,EACPkE,IAAKtB,MAAAA,OAAS,EAATA,EAAWuB,WAChBC,OAAQP,MAAAA,OAAI,EAAJA,EAAMM,WACdpB,cAAeA,EACfsB,MAAO,CACH,QAAS,QACTlD,KAAM2B,GAEVwB,OAAQ,CACJ,QAAS,QACT9D,IAAKO,EACLwD,cAAepB,EACfN,MAAOA,EACPG,gBAAiBA,EACjBU,aAAcA,KAItB,OACItE,EAAAA,cAAAA,EAAAA,SAAAA,KAEIA,EAAAA,cAAAA,SAAAA,CAAA,kBAAwB,UAAUoF,KAAK,sBAAsBC,wBAAyB,CAAEC,OAAQZ,MAWpGnC,mBACJ9B,EACAC,EACAE,GAEA,OACIZ,EAAAA,cAAAA,EAAAA,SAAAA,KACKS,GAAST,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,gBAAgBC,QAASvB,IAC7CC,GAAeV,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,sBAAsBC,QAAStB,IACzDE,GAAmBZ,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,gBAAgBC,QAASpB,IACvDZ,EAAAA,cAAAA,OAAAA,CAAM+B,KAAK,eAAeC,QAAQ,aAUvCb,oBAAoBV,EAA2B9C,GAC9C8C,IACDA,EAAQ,IAEZ,MAAM8E,EAAe7G,KAAKuB,MAAMrC,OAChC,GAAI2H,GAAgBA,EAAaC,wBAC7B,OAAO/E,EAEX,MAAMgF,EAAY9H,GAAOA,EAAI+H,SAU7B,OATID,IACIA,EAAUE,kBACVlF,EAAQ,GAAGgF,EAAUE,kBAAkBlF,KAEvCgF,EAAUG,kBACVnF,EAAQ,GAAGA,IAAQgF,EAAUG,oBAI9BnF,GAIf,2mBClNA,MAAMoF,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8B,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAIrG,MAAM,oBAAsBmG,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQC,UAAU1G,KAC3DmG,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQC,UAAU1G,IAAMuG,IAMhGJ,EAAQC,QAAQ,6BAA+B,CAC5CQ,EAAG,IAAMC,EAAQ,MACjBC,MAAO,qBACPC,GAAI,CAAC,CAAC1E,KAAK,UAAY2E,KAAK,0EAA2EC,MAAO,GAAG,CAAC5E,KAAK,qBAAuB2E,KAAK,qEAAsEC,MAAO,GAAG,CAAC5E,KAAK,kBAAoB2E,KAAK,gEAAiEC,MAAO,IAE1UC,KAAK,EACLC,GAAI,YACJC,EAAG,4BACHC,EAAG,YAEHC,IAAK,GAGLC,GAAI,yCAOAjB,EAF4B,0EACXO,EAAQ,KAQzBP,EAF4B,gEACXO,EAAQ,MAQzBP,EAF4B,qEACXO,EAAQ,MAMjCW,OAAOC,aAAeD,OAAOC,cAAgB,GAC7CD,OAAOC,aAAarB,QAAO,OACpBoB,OAAOC,aAAarB,SAAW,IAC/BD,EAAQC,SAGXoB,OAAOC,aAAapB,YAAW,OAC5BmB,OAAOC,aAAapB,aAAe,IACnCF,EAAQE,iCCvFnBqB,EAAOC,QAAUrH,2BCAjBoH,EAAOC,QAAUC","sources":["webpack://mattressfirm/./src/Utilities/allRegex.ts?9889","webpack://mattressfirm/./src/modules/mfrm-product-page-summary/get-product-recordId.action.ts?a795","webpack://mattressfirm/./src/modules/mfrm-product-page-summary/mfrm-product-page-summary.tsx?52af","webpack://mattressfirm/./lib/mfrm-product-page-summary/module-registration.js?4480","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nexport const emailRegex = (emailValue: string) => {\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n const validationEmail = /^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]+(?:-+[a-z0-9]+)*\\.)+(?:xn--[a-z0-9]+|[a-z]{2,16})$/i;\r\n\r\n return validationEmail.test(emailValue);\r\n};\r\n\r\n/**\r\n * Method to remove special characters for product name from product URL\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialChars = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n return str?.replace(/[^a-zA-Z0-9- ]/g, '');\r\n }\r\n return str;\r\n};\r\n\r\n\r\n/**\r\n * Method to remove special characters for product URL's path\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialCharsFromURLPath = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n const urlPath = decodeURIComponent(str.split('.p')[0])?.replace(/[^a-zA-Z0-9-/ ]/g, '');\r\n return `${urlPath}.p`;\r\n }\r\n return str;\r\n};\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 Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getByIdAsync,\r\n getVariantsByDimensionValuesAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n ProductDimension,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n\r\nexport class GetProductRecordidInput implements Msdyn365.IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public matchingDimensionValues: ProductDimension[];\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.matchingDimensionValues = matchingDimensionValues || [];\r\n }\r\n\r\n public getCacheKey = () => `GetProductRecord`;\r\n public getCacheObjectType = () => 'SimpleProduct';\r\n public dataCacheType = (): Msdyn365.CacheType => 'none';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IGetProductRecordidData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext): GetProductRecordidInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new GetProductRecordidInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: GetProductRecordidInput, ctx: Msdyn365.IActionContext): Promise {\r\n let baseProduct: SimpleProduct | null = null;\r\n if (!ctx.requestContext.app.config.queryBasedVariantSelection) {\r\n const response = await getByIdAsync({ callerContext: ctx }, input.productId, input.channelId);\r\n baseProduct = Array.isArray(response) ? response[0] : response;\r\n }\r\n const matchingDimensionValues = input.matchingDimensionValues ?? [];\r\n const data = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct && baseProduct?.MasterProductId ? baseProduct.MasterProductId : input.productId,\r\n input.channelId,\r\n matchingDimensionValues\r\n );\r\n\r\n return data;\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'GetProductRecordId',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { HtmlHeadInclude, IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { IMfrmProductPageSummaryData } from './mfrm-product-page-summary.data';\r\nimport { IMfrmProductPageSummaryProps } from './mfrm-product-page-summary.props.autogenerated';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { removeSpecialCharsFromURLPath } from '../../Utilities/allRegex';\r\n/**\r\n *\r\n * ProductPageSummary component\r\n * @extends {React.PureComponent}\r\n */\r\nclass ProductPageSummary extends React.PureComponent> {\r\n constructor(props: any) {\r\n super(props);\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.props.data.productPageSummary.result === undefined) {\r\n throw new Error('PageSummaryData input to page-summary is undefined. Unable to generate page-summary');\r\n }\r\n const {\r\n config,\r\n context,\r\n data\r\n } = this.props;\r\n let { data: { productPageSummary: { result: {\r\n title,\r\n description,\r\n keywords,\r\n sharingImageUrl,\r\n faviconUrl\r\n } } } } = this.props;\r\n\r\n // Product SEO metadata specific information - non-overridable\r\n const productName = title;\r\n\r\n // Override values coming from data action if config values are provided\r\n title = config.title?.split('').join(productName) || title;\r\n description = config.description?.split('').join(productName) || description;\r\n keywords = config.keywords || keywords;\r\n sharingImageUrl = (config.sharingImage && config.sharingImage.src) || sharingImageUrl;\r\n faviconUrl = config.faviconUrl || faviconUrl;\r\n\r\n // Construct page title with suffix and prefix if provided from app settings\r\n const pageTitle = this._constructPageTitle(title, context && context.request && context.request.app);\r\n const url = context.request.url.requestUrl;\r\n const urlParams = new URLSearchParams(url.search);\r\n const variantid = urlParams.get('variantid') ? `?variantid=${urlParams.get('variantid')}` : null;\r\n const canonicalUrl = `${url.origin}${removeSpecialCharsFromURLPath(url?.pathname, context)}${variantid ? variantid : ''}`;\r\n return (\r\n \r\n \r\n {pageTitle && {pageTitle}}\r\n {description && }\r\n {keywords && }\r\n {canonicalUrl && }\r\n {faviconUrl && }\r\n {this._renderProductMetadata(context, data)}\r\n {!config.disableOgTags && this._renderOgTags(pageTitle, description, sharingImageUrl)}\r\n {!config.disableTwitterTags && this._renderTwitterTags(pageTitle, description, sharingImageUrl)}\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Renders the facebook and other social media specific metadata tags\r\n *\r\n * @param title Page title\r\n * @param description Product description\r\n * @param sharingImageUrl Primary product image url\r\n */\r\n private _renderOgTags(title: string | undefined, description: string | undefined, sharingImageUrl: string | undefined): JSX.Element {\r\n return (\r\n <>\r\n {title && }\r\n {description && }\r\n {sharingImageUrl && }\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Constructs and renders the JSON-LD tag used to output product specific metadata used by search engine crawlers\r\n * also known as: SEO Schema\r\n *\r\n * @param context used to get currency\r\n * @param data the resulting data gathered from coresponding action file.\r\n */\r\n private _renderProductMetadata(context: ICoreContext, data: IMfrmProductPageSummaryData): JSX.Element {\r\n if (!data.productPageSummary.result || !data.product.result || !context.request.channel?.Currency) {\r\n throw new Error(\"Missing data required to build SEO schema.\");\r\n }\r\n\r\n const variantRecordId = data.product.result.RecordId;\r\n const currentVariant = data.productRetailId.result?.find((variant: SimpleProduct) => variant.RecordId === variantRecordId);\r\n const retailVariantId: string | undefined = currentVariant?.ExtensionProperties?.find(item => item.Key === 'RetailVariantId')?.Value?.StringValue;\r\n const {\r\n title,\r\n description,\r\n sharingImageUrl,\r\n canonicalUrl,\r\n variantId,\r\n price,\r\n productBrand,\r\n itemCondition,\r\n priceValidUntil,\r\n isOutOfStockArray,\r\n gtinArray\r\n } = data.productPageSummary.result;\r\n const currencyCode = context.request.channel.Currency;\r\n\r\n const isOutOfStockValue = isOutOfStockArray?.find(it => it.key === `${variantRecordId}`)?.value || null;\r\n const isOutOfStock = isOutOfStockValue === null ? undefined : parseInt(isOutOfStockValue, 10);\r\n const availability = isOutOfStock === undefined || isNaN(isOutOfStock) ?\r\n undefined : isOutOfStock ? \"OutOfStock\" : \"InStock\";\r\n\r\n const gtinValue = gtinArray?.find(it => it.key === `${retailVariantId}`)?.value || null;\r\n const gtin = gtinValue === null ? undefined : parseInt(gtinValue, 10) || undefined;\r\n\r\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\r\n const productMetaData = JSON.stringify({\r\n // tslint:disable-next-line:no-http-string\r\n '@context': 'http://schema.org',\r\n '@type': 'Product',\r\n '@id': canonicalUrl,\r\n name: title,\r\n description: description,\r\n image: sharingImageUrl,\r\n sku: variantId?.toString(),\r\n gtin12: gtin?.toString(),\r\n itemCondition: itemCondition,\r\n brand: {\r\n '@type': 'Brand',\r\n name: productBrand\r\n },\r\n offers: {\r\n '@type': 'Offer',\r\n url: canonicalUrl,\r\n priceCurrency: currencyCode,\r\n price: price,\r\n priceValidUntil: priceValidUntil,\r\n availability: availability\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {/* tslint:disable:react-no-dangerous-html - intentionally setting inner html with only data action output (no unsanizted user input)*/}\r\n