{"version":3,"file":"static/js/6d7dbb6d890962be53e4.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/analytics/clickTrack.ts?bce2","webpack://mattressfirm/./src/Utilities/analytics/htmlToText.ts?c3c7","webpack://mattressfirm/./src/Utilities/analytics/promotionClickTrack.ts?a0bd","webpack://mattressfirm/./src/Utilities/analytics/utagCaller.ts?3814","webpack://mattressfirm/./src/Utilities/get-dynamic-image.tsx?8e0f","webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/links.tsx?e522","webpack://mattressfirm/./src/themes/mattressfirm/views/content-block.view.tsx?e92e","webpack://mattressfirm/./src/themes/mattressfirm/views/tealiumAnalytics/analytics.ts?3dfb","webpack://mattressfirm/./lib/content-block/module-registration.js?4cb2","webpack://mattressfirm/./src/modules/content-block/components/additional-content.tsx?d5f9","webpack://mattressfirm/./src/modules/content-block/components/links.tsx?abbf","webpack://mattressfirm/./src/modules/content-block/content-block.tsx?3084","webpack://mattressfirm/./src/modules/content-block/content-block.view.tsx?1773","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?a69e","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.split.js?9fc2","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { callUtagLink } from \"./utagCaller\";\r\n\r\nexport interface IUtagPromoConfig {\r\n promotion_impression_name?: string[];\r\n promotion_impression_id?: string[];\r\n promotion_impression_creative?: string[];\r\n promotion_impression_position?: (string | undefined)[];\r\n promotion_name?: string[];\r\n promotion_id?: string[];\r\n promotion_creative?: string[];\r\n promotion_position?: (string | undefined)[];\r\n}\r\n\r\nexport interface IUtagGeneralConfig {\r\n enhanced_action?: string | undefined;\r\n}\r\nexport interface ICustomerConfig {\r\n customer_email?: string;\r\n}\r\nexport interface IProductConfig {\r\n product_id?: string[];\r\n product_name?: string[];\r\n product_category?: (string | undefined)[];\r\n product_brand?: (string | undefined)[];\r\n product_variant?: (string | undefined)[];\r\n product_price?: (string | undefined)[];\r\n product_list_name?: string[];\r\n product_position?: (number | undefined)[];\r\n product_quantity?: (string | undefined)[];\r\n checkout_step?: string;\r\n}\r\nexport interface IProductImpressionConfig {\r\n product_impression_brand?: (string | undefined)[];\r\n product_impression_list_name?: (string | undefined)[];\r\n product_impression_id?: string[];\r\n product_impression_name?: string[];\r\n product_impression_category?: string[];\r\n product_impression_variant?: (string | undefined)[];\r\n product_impression_position?: number[];\r\n product_impression_price?: number[];\r\n}\r\nexport interface IAnalyticsConfiguration {\r\n event?: string | null;\r\n eventName?: string | null;\r\n eventCategory?: string | null;\r\n eventAction?: string | null;\r\n eventLabel?: string | null;\r\n eventType?: string | null;\r\n eventNoninteraction?: string;\r\n enhancedAction?: string | null;\r\n searchTerm?: string | undefined | null;\r\n searchType?: string | undefined | null;\r\n generalConfig?: IUtagGeneralConfig;\r\n promoConfig?: IUtagPromoConfig;\r\n productConfig?: IProductConfig;\r\n customerConfig?: ICustomerConfig;\r\n productImpressionConfig?: IProductImpressionConfig;\r\n}\r\n\r\nexport const fireAnalyticsLink = ({\r\n searchTerm = null,\r\n searchType = null,\r\n eventName = null,\r\n eventCategory = null,\r\n eventAction = null,\r\n eventLabel = null,\r\n eventType = null,\r\n eventNoninteraction = 'false',\r\n enhancedAction = null,\r\n generalConfig = {},\r\n promoConfig = {},\r\n productConfig = {},\r\n customerConfig = {},\r\n productImpressionConfig = {}\r\n}: IAnalyticsConfiguration) => {\r\n void callUtagLink({\r\n ...generalConfig,\r\n ...promoConfig,\r\n ...productConfig,\r\n ...customerConfig,\r\n ...productImpressionConfig,\r\n event: eventName,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_type: eventType,\r\n event_noninteraction: eventNoninteraction,\r\n enhanced_action: enhancedAction,\r\n search_term: searchTerm,\r\n search_type: searchType\r\n });\r\n};","\r\n// Convert Rich Text inner text to string for analytics tagging\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const htmltoText = (html: string) => {\r\n if(MsDyn365.isBrowser) {\r\n // Create a new div element\r\n const tempDivElement = document.createElement('div');\r\n\r\n // Set the HTML content with the given value\r\n // tslint:disable-next-line: no-inner-html\r\n tempDivElement.innerHTML = html;\r\n\r\n // Retrieve the text property of the element\r\n return tempDivElement.textContent || tempDivElement.innerText || '';\r\n } else {\r\n return '';\r\n }\r\n};","import { fireAnalyticsLink } from './clickTrack';\r\n\r\ninterface IPromotionConfigs {\r\n eventLabel: string;\r\n promotionName: string[];\r\n promotionId: string[];\r\n promotionCreative: string[];\r\n promotionPosition: (string | undefined)[];\r\n}\r\n\r\nexport const firePromotionImpression = ({ eventLabel = '', promotionName = [], promotionId = [], promotionCreative = [], promotionPosition = [] }: IPromotionConfigs) => {\r\n fireAnalyticsLink({\r\n eventName: 'promotion-impression',\r\n eventCategory: 'ecommerce',\r\n eventAction: 'promotion impression',\r\n eventLabel: eventLabel,\r\n eventNoninteraction: 'true',\r\n promoConfig: {\r\n promotion_impression_name: promotionName,\r\n promotion_impression_id: promotionId,\r\n promotion_impression_creative: promotionCreative,\r\n promotion_impression_position: promotionPosition\r\n }\r\n });\r\n};\r\n\r\nexport const firePromotionClick = ({ eventLabel = '', promotionName = [], promotionId = [], promotionCreative = [], promotionPosition = [] }: IPromotionConfigs) => {\r\n fireAnalyticsLink({\r\n eventName: 'promotion-click',\r\n eventCategory: 'ecommerce',\r\n eventAction: 'promotion click',\r\n eventLabel: eventLabel,\r\n eventNoninteraction: 'false',\r\n promoConfig: {\r\n promotion_name: promotionName,\r\n promotion_id: promotionId,\r\n promotion_creative: promotionCreative,\r\n promotion_position: promotionPosition\r\n }\r\n });\r\n};","import { IAnalyticsConfiguration } from './clickTrack';\r\n\r\n// Interface for 3rd-party function. AKA utag.\r\ninterface ITealium {\r\n link(data: {}): void | false;\r\n view(data: {}): void | false;\r\n data(data: {}): void | false;\r\n}\r\n\r\nexport interface IPromotionConfig {\r\n event?: string | null;\r\n event_name?: string | null;\r\n search_term?: string | null;\r\n search_type?: string | null;\r\n event_category?: string | null;\r\n event_action?: string | null;\r\n event_label?: string | null;\r\n event_type?: string | null;\r\n event_noninteraction?: string;\r\n enhanced_action?: string | null;\r\n customer_email?: string | undefined;\r\n customer_phone_number?: string | undefined;\r\n first_name?: string | undefined;\r\n last_name?: string | undefined;\r\n address1?: string | undefined;\r\n address2?: string | undefined;\r\n city?: string | undefined;\r\n state?: string | undefined;\r\n zip_code?: string | undefined;\r\n order_subtotal?: string | undefined;\r\n order_currency?: string | undefined;\r\n country?: string | undefined;\r\n // productConfig?: IProductDataConfig;\r\n checkout_step?: string;\r\n checkout_option?:(string | undefined)[];\r\n checkout_type?:(string | undefined)[];\r\n product_id?: (string | undefined)[];\r\n product_name?: (string | undefined)[];\r\n product_category?: (string | undefined)[];\r\n product_brand?: (string | undefined)[];\r\n product_variant?: (string | undefined | number)[];\r\n product_price?: (string | undefined)[];\r\n product_quantity?: (string | undefined)[];\r\n product_url?: (string | undefined)[];\r\n product_size?: (string | undefined)[];\r\n product_image_url?: (string | undefined)[];\r\n core_item_flag?: string | null;\r\n funnel_type?: string | null;\r\n ga_title?: string | null;\r\n ga_location?: string | null;\r\n order_quantity?: string | null;\r\n}\r\n\r\ninterface IProductDataConfig {\r\n product_variant?: (string | undefined)[];\r\n product_price?: (string | undefined)[];\r\n}\r\n\r\nexport interface IAnalyticsConfigurationData {\r\n productConfig?: IProductDataConfig;\r\n}\r\n\r\n\r\n// Legacy function\r\nexport const callUtag = async (objToCall: IPromotionConfig) => {\r\n void await callUtagLink(objToCall);\r\n};\r\n\r\n/**\r\n * Tealium dispatch click tracking.\r\n * @param objToCall\r\n */\r\nexport const callUtagLink = async (objToCall: IPromotionConfig | IAnalyticsConfiguration) => {\r\n try {\r\n Object.keys(objToCall).forEach(\r\n key => {\r\n if (objToCall[key] === null) {\r\n delete objToCall[key];\r\n }\r\n }\r\n );\r\n // If utag doesn't exist in the global scope, set as false.\r\n const utag: ITealium = global.hasOwnProperty('utag') ? global[\"utag\"] : false;\r\n if(utag) { utag.link(objToCall); }\r\n\r\n } catch (e) {\r\n console.log('Utag Error', e);\r\n }\r\n};\r\n\r\n/**\r\n * Tealium dispatch view tracking.\r\n * @param objToCall\r\n */\r\nexport const callUtagView = async (objToCall: {}) => {\r\n try {\r\n // If utag doesn't exist in the global scope, set as false.\r\n const utag: ITealium = global.hasOwnProperty('utag') ? global[\"utag\"] : false;\r\n if(utag) { utag.view(objToCall); }\r\n } catch (e) {\r\n console.log('utag View Error', e);\r\n }\r\n};\r\n\r\n/**\r\n * Not currently implemented.\r\n * @param objToCall\r\n * @param dataType\r\n */\r\nexport const callUtagData = ({ productConfig = {} }: IAnalyticsConfigurationData , dataType: string) => {\r\n try {\r\n // If utag doesn't exist in the global scope, set as false.\r\n const utag: ITealium = global.hasOwnProperty('utag') ? global[\"utag\"] : false;\r\n switch (dataType) {\r\n case 'data':\r\n // @ts-ignore\r\n if('utag' in window) { utag.data = {...utag.data, ...productConfig}; }\r\n break;\r\n case '_data':\r\n // @ts-ignore\r\n utag_data = {...utag_data , ...productConfig};\r\n break;\r\n default:\r\n null;\r\n }\r\n } catch (e) {\r\n console.log('Utag Error', e);\r\n }\r\n};","import MsDyn365, { IImageData } from '@msdyn365-commerce/core';\r\nimport _get from 'lodash/get';\r\nimport _cloneDeep from 'lodash/cloneDeep';\r\nimport * as React from 'react';\r\n\r\ninterface IImageDimension {\r\n width: string;\r\n height: string;\r\n}\r\ninterface IImageSettings {\r\n sm: IImageDimension;\r\n md: IImageDimension;\r\n lg: IImageDimension;\r\n}\r\nexport interface IResponsiveImage {\r\n desktop: IImageData | undefined;\r\n tablet: IImageData | undefined;\r\n mobile: IImageData | undefined;\r\n defaultImg: IImageData | undefined;\r\n imageSettingViewports?: IImageSettings | undefined;\r\n}\r\n\r\nexport interface IResponsiveImageFromSeoData {\r\n desktop: IImageData | undefined;\r\n tablet: IImageData | undefined;\r\n mobile: IImageData | undefined;\r\n imageSettingViewports?: IImageSettings | undefined;\r\n}\r\n\r\nexport const getResponsiveFromSeoData = ({ desktop, tablet, mobile }: IResponsiveImageFromSeoData) => {\r\n const desktopWidth = 1025;\r\n const tabletWidth = 768;\r\n\r\n const query = {\r\n desktop: '',\r\n tablet: '',\r\n mobile: ''\r\n };\r\n\r\n // Removing resizing for the time being to discuss with Microsoft\r\n // if (imageSettingViewports) {\r\n // const { sm, md, lg } = imageSettingViewports;\r\n // query.desktop = `&w=${lg.width}&h=${lg.height}`;\r\n // query.tablet = `&w=${md.width}&h=${md.height}`;\r\n // query.mobile = `&w=${sm.width}&h=${sm.height}`;\r\n // }\r\n\r\n return (\r\n \r\n <>\r\n {desktop?.src && }\r\n {tablet?.src && }\r\n {mobile?.src && }\r\n {desktop?.altText}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\n// Note Responsive Image does not use Msdyn365 Image component\r\nexport const getResponsiveImage = ({ desktop, tablet, mobile, defaultImg }: IResponsiveImage): React.ReactNode => {\r\n // Note this is a temp solution as D365 does not support dynamic images across viewports\r\n\r\n const desktopWidth = 1025;\r\n const tabletWidth = 768;\r\n const lazyload = !defaultImg?.imageSettings?.disableLazyLoad;\r\n\r\n const query = {\r\n desktop: '',\r\n tablet: '',\r\n mobile: ''\r\n };\r\n\r\n // Removing resizing for the time being to discuss with Microsoft\r\n // if (imageSettingViewports) {\r\n // const { sm, md, lg } = imageSettingViewports;\r\n // query.desktop = `&w=${lg.width}&h=${lg.height}`;\r\n // query.tablet = `&w=${md.width}&h=${md.height}`;\r\n // query.mobile = `&w=${sm.width}&h=${sm.height}`;\r\n // }\r\n\r\n const defaultImgSrc = `${defaultImg?.src}${query.desktop}${\r\n defaultImg?.imageSettings?.quality ? `&q=${defaultImg.imageSettings.quality}` : ''\r\n }`;\r\n\r\n return (\r\n \r\n {lazyload ? (\r\n <>\r\n {desktop?.src && }\r\n {tablet?.src && }\r\n {mobile?.src && }\r\n \r\n \r\n ) : (\r\n <>\r\n {desktop?.src && }\r\n {tablet?.src && }\r\n {mobile?.src && }\r\n {defaultImg?.altText}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport interface IDynamicImageProps {\r\n moduleName: string;\r\n}\r\n\r\nexport const getDynamicImageSettings = ({ moduleName }: IDynamicImageProps) => {\r\n // This logic is directly from MsDyn Image Component src builder\r\n // just applied to get dynamic image settings if they are defined\r\n const imageSettings = { viewports: undefined };\r\n const themeSettingsForModule = MsDyn365.themeSettings?.mattressfirm?.modules?.[moduleName];\r\n if (themeSettingsForModule) {\r\n const themeSettingsForLayout = themeSettingsForModule.properties.dynamic;\r\n if (themeSettingsForLayout) {\r\n const imageViewportProperties = _get(themeSettingsForLayout.properties, ['image'], { properties: imageSettings }).properties;\r\n // Clone the image viewport properties from theme settings\r\n // so that the proxy traps do not affect the global themesettings\r\n imageSettings.viewports = _cloneDeep(imageViewportProperties);\r\n }\r\n }\r\n\r\n return imageSettings.viewports;\r\n};\r\n","import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nexport interface IVirtualRefinersConfig {\r\n order: number;\r\n refinerName: string;\r\n enableForMattresses: boolean;\r\n enableForOtherCategories: boolean;\r\n allowDuplicate: boolean;\r\n}\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const origin = requestUrl.origin;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `${origin}/${filteredPath}`;\r\n};\r\n\r\nexport const filteredURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `/${filteredPath}`;\r\n};\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURLWithoutBaseUrl = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('\\/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n return urlParts?.join('\\/');\r\n};\r\n\r\n/**\r\n * This will remove the Pipe sign value set from urlParts\r\n * @param urlParts\r\n * @returns\r\n */\r\nexport const removePipeSignValue = (urlParts: string[]) => {\r\n // urlParts.forEach((part, index) => {\r\n // const indexOfValue = urlParts.indexOf('%7c');\r\n // if (indexOfValue !== -1) {\r\n // urlParts.splice(indexOfValue, 1);\r\n // }\r\n // });\r\n\r\n if (urlParts !== undefined && urlParts.length > 0) {\r\n urlParts = urlParts.filter(urlPart => urlPart.indexOf('%7c') === -1);\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will remove the keywords from urlParts array which were received from\r\n * the app.settings.json/CMS Extensions\r\n * @param urlParts\r\n * @param requestContext\r\n * @returns urlParts array filtered\r\n */\r\nexport const removeKeywords = (urlParts: string[], requestContext: IRequestContext): string[] => {\r\n const removeKeywordFromUrl = requestContext.app.config.removeKeywordFromUrl;\r\n\r\n if (urlParts.length > 0 && removeKeywordFromUrl && removeKeywordFromUrl.length > 0) {\r\n const removeKeywordFromUrlArray: string[] = removeKeywordFromUrl?.trim().split(',');\r\n removeKeywordFromUrlArray?.length > 0 &&\r\n urlParts.forEach(_part => {\r\n removeKeywordFromUrlArray.forEach(removeKeyword => {\r\n const trimmedKeyword = removeKeyword.trim().toLowerCase();\r\n const indexOfValue = urlParts.indexOf(trimmedKeyword);\r\n if (trimmedKeyword.length > 0 && indexOfValue !== -1) {\r\n urlParts.splice(indexOfValue, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will sort the Virtual refiner config based on order and return\r\n * only active virtual refiner configs based on isMattress category will\r\n * be returned\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getSortedVirtualRefinerConfig = (\r\n requestContext: IRequestContext,\r\n isMattressesCategory: boolean | undefined\r\n): IVirtualRefinersConfig[] | undefined => {\r\n let appConfigSorted = getVirtualRefinerConfig(requestContext);\r\n\r\n // sort the config by provided config\r\n if (appConfigSorted) {\r\n if (isMattressesCategory === true) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForMattresses;\r\n });\r\n } else if (isMattressesCategory === false) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForOtherCategories;\r\n });\r\n }\r\n appConfigSorted.sort((a: IVirtualRefinersConfig, b: IVirtualRefinersConfig) => {\r\n return a.order - b.order;\r\n });\r\n }\r\n\r\n return appConfigSorted;\r\n};\r\n\r\n/**\r\n * Virtual refiner names from the app.settings.json will be returned which can be used\r\n * to filter out refiners data based upon active virtual refiners\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns string[]\r\n */\r\nexport const getVirtualRefinerNames = (requestContext: IRequestContext, isMattressesCategory: boolean | undefined): string[] => {\r\n const sortedVirtualRefinerConfig = getSortedVirtualRefinerConfig(requestContext, isMattressesCategory);\r\n\r\n const appConfigRefinerNames: string[] = [];\r\n\r\n sortedVirtualRefinerConfig &&\r\n sortedVirtualRefinerConfig.forEach(sortedConfig => {\r\n appConfigRefinerNames.push(sortedConfig.refinerName.trim().toLowerCase());\r\n });\r\n\r\n return appConfigRefinerNames;\r\n};\r\n\r\n/**\r\n * This will return the value of virtual refiner configuration\r\n * @param requestContext\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getVirtualRefinerConfig = (requestContext: IRequestContext): IVirtualRefinersConfig[] => {\r\n return requestContext.app.config.urlModifications;\r\n};\r\n\r\nexport async function getVirtualRefinerValues(\r\n requestContext: IRequestContext,\r\n virtualRefiners: IProductRefinerHierarchy[]\r\n): Promise {\r\n const virtualRefinerValues: ProductRefinerValue[] = [];\r\n if (virtualRefiners.length === 0) {\r\n return virtualRefinerValues;\r\n }\r\n const requestUrl = requestContext.url.requestUrl;\r\n // const origin = requestUrl.origin;\r\n const path = requestUrl.pathname;\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n urlParts.splice(-1);\r\n }\r\n\r\n // run loop for each url part and get values from refiners for further usage\r\n const finalizedUrlParts: string[] = [];\r\n urlParts.forEach(plainUrlPart => {\r\n const urlPart = decodeURIComponent(plainUrlPart);\r\n if (urlPart.indexOf('|') !== -1) {\r\n const splitOnPipeSign = urlPart?.split('|');\r\n const filteredParts = splitOnPipeSign.filter(part => part.length > 0);\r\n filteredParts.forEach(filteredPart => {\r\n finalizedUrlParts.push(filteredPart.toLowerCase().trim());\r\n });\r\n }\r\n finalizedUrlParts.push(urlPart);\r\n });\r\n finalizedUrlParts.forEach((urlPart) => {\r\n virtualRefiners.forEach((mainRefiner) => {\r\n mainRefiner.Values.forEach((refinerValue) => {\r\n const refinerValueKeyName = refinerValue.LeftValueBoundString?.toLowerCase().trim().split(' ')?.join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-');\r\n if (refinerValueKeyName && refinerValueKeyName === urlPart) {\r\n virtualRefinerValues.push(refinerValue);\r\n }\r\n });\r\n });\r\n });\r\n\r\n return virtualRefinerValues;\r\n}\r\n\r\n/**\r\n * For navigation menu links, it will remove keywords configured in global configurations from the navigation link\r\n * and clp link and return url path string\r\n * @param link\r\n * @param requestContext\r\n * @returns string\r\n */\r\nexport const navLinkKeywordRemoval = (link: string, requestContext: IRequestContext): string => {\r\n // Using the rest operator in case there is a weirdly formatted URL with multiple question marks.\r\n const [linkBase, ...linkParams] = link?.split('?');\r\n\r\n // Only apply to category links and product links, which end in .c or .p. Check that a keyword is configured.\r\n if (!linkBase.endsWith('.c') && !linkBase.endsWith('.p') || !requestContext.app.config) {\r\n return link;\r\n }\r\n\r\n // Separate out url parts split on forward /\r\n let urlParts = linkBase?.split('\\/');\r\n\r\n // Remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // Glue the URL params back together\r\n const linkParam = linkParams.map(param => `?${param}`)?.join('');\r\n\r\n // Rebuild URL by joining with forward slash and appending any URL parameters\r\n const filteredLink = `${urlParts?.join('/')}${linkParam}`;\r\n return `${filteredLink}`;\r\n};\r\nexport const regExSpecialChars = (includeConfigList: string): RegExp => {\r\n let includeConfig = '';\r\n if (includeConfigList !== undefined && includeConfigList !== '') {\r\n includeConfig = includeConfigList?.trim().split(',')?.join('\\\\\\\\');\r\n includeConfig = includeConfig && includeConfig !== '' ? `\\\\\\\\${includeConfig}` : '';\r\n const pattern = `[^\\\\w\\\\&\\\\|${includeConfig}]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n }\r\n};\r\n","import { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { navLinkKeywordRemoval } from '../../../Utilities/plp-url-utils';\r\nimport { ILinksData } from '../definition-extensions/content-block.ext.props.autogenerated';\r\n\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCardLinks component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ContentCardLinks extends React.PureComponent {\r\n public render(): JSX.Element {\r\n const editableLinks = this._mapEditableLinks(this.props.links);\r\n return (\r\n
\r\n {editableLinks && editableLinks.length ? (\r\n \r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n private _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\r\n if (!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link, index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\r\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: btnClass,\r\n linkText: link.linkText,\r\n linkUrl: navLinkKeywordRemoval(link.linkUrl.destinationUrl, this.props.requestContext),\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n };\r\n}\r\nexport default ContentCardLinks;\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\nimport { IContentBlockViewProps } from '@msdyn365-commerce-modules/content-block';\r\nimport { getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365, { ContentEditableEvent } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { useInView } from 'react-intersection-observer';\r\nimport { fireAnalyticsLink } from '../../../Utilities/analytics/clickTrack';\r\nimport { htmltoText } from '../../../Utilities/analytics/htmlToText';\r\nimport { firePromotionClick, firePromotionImpression } from '../../../Utilities/analytics/promotionClickTrack';\r\nimport { getDynamicImageSettings, getResponsiveImage } from '../../../Utilities/get-dynamic-image';\r\nimport _getViewPort from '../../../Utilities/get-view-port';\r\nimport { navLinkKeywordRemoval } from '../../../Utilities/plp-url-utils';\r\nimport LinksComponent from '../custom-components/links';\r\nimport { IContentBlockProps } from '../definition-extensions/content-block.ext.props.autogenerated';\r\nimport { getAnalyticsConfig, getPromoAnalyticsConfig } from './tealiumAnalytics/analytics';\r\nimport classnames from 'classnames';\r\n\r\n// tslint:disable-next-line: max-func-body-length\r\nconst ContentBlockView: React.FC> = props => {\r\n const {\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n title,\r\n text,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel\r\n } = props;\r\n\r\n const {\r\n dynamicImages,\r\n useDynamicImages,\r\n contentBlockStyles,\r\n contentBlockLayouts,\r\n links,\r\n tealiumEvent,\r\n enhancedEcommTracking,\r\n tealiumPromotion,\r\n paragraph,\r\n heading\r\n } = props.config;\r\n\r\n const pagePath = MsDyn365.isBrowser\r\n ? window.location.href.split(location.host)[1].includes('?')\r\n ? window.location.href.split(location.host)[1].split('?')[0]\r\n : window.location.href.split(location.host)[1]\r\n : '';\r\n const paragraphText = paragraph ? htmltoText(paragraph.toString()).trim() : '';\r\n const analyticsConfig = getAnalyticsConfig(pagePath, heading?.text, props.config.imageAriaLabel, tealiumEvent);\r\n const promoAnalyticsConfig = getPromoAnalyticsConfig(props.config.image, imageLink, pagePath, paragraphText, tealiumPromotion);\r\n const isPromotion = enhancedEcommTracking === 'promotion';\r\n\r\n const styles = 'ms-content-block__';\r\n\r\n const handleAnalytics = () => {\r\n if (MsDyn365.isBrowser) {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n if (contentBlockStyles === 'painSpecific' && links) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'Sleep-Disruptor-Pain-Specific-Module',\r\n event_category: 'Sleep Disruptor Pain Specific Module',\r\n event_action: `to: ${links[0].linkUrl.destinationUrl}`,\r\n event_label: `from ${heading?.text} Section: ${pagePath}`,\r\n event_noninteraction: 'false'\r\n });\r\n } else {\r\n fireAnalyticsLink({ ...analyticsConfig });\r\n }\r\n if (isPromotion) {\r\n firePromotionClick({ ...promoAnalyticsConfig });\r\n }\r\n }\r\n\r\n if (imageLink) {\r\n window.location.href = navLinkKeywordRemoval(imageLink, props.context.request);\r\n }\r\n if (links) {\r\n const isOpenInNewTab = links[0].openInNewTab;\r\n !isOpenInNewTab\r\n ? (window.location.href = navLinkKeywordRemoval(links[0].linkUrl.destinationUrl, props.context.request))\r\n : window.open(navLinkKeywordRemoval(links[0].linkUrl.destinationUrl, props.context.request));\r\n }\r\n }\r\n };\r\n\r\n let currentImage = image;\r\n\r\n // Only use Responsive Image if Dynamic Images are defined\r\n if (dynamicImages && useDynamicImages) {\r\n currentImage = getResponsiveImage({\r\n desktop: dynamicImages?.desktopImage,\r\n tablet: dynamicImages?.tabletImage,\r\n mobile: dynamicImages?.mobileImage,\r\n defaultImg: props.config.image,\r\n imageSettingViewports: getDynamicImageSettings({ moduleName: 'content-block' })\r\n });\r\n }\r\n\r\n const handleLinkTextChange = (linkIndex: number) => (event: ContentEditableEvent) => {\r\n if (links && links[linkIndex]) {\r\n links[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const [ref, inView] = useInView({\r\n triggerOnce: true,\r\n rootMargin: '25px'\r\n });\r\n\r\n React.useEffect(() => {\r\n if (MsDyn365.isBrowser && isPromotion && inView) {\r\n firePromotionImpression({ ...promoAnalyticsConfig });\r\n }\r\n }, [inView]);\r\n\r\n //Content block styles\r\n let contentBlockStyle = '';\r\n let contentBlockLink = '';\r\n let contentBlockImage = '';\r\n\r\n if(contentBlockStyles === 'painSpecific') {\r\n contentBlockStyle = `${styles}pain`;\r\n contentBlockLink = `${styles}pain-link`;\r\n contentBlockImage = `${styles}pain-image`;\r\n }\r\n\r\n //Content block layout\r\n let contentBlockLayout = '';\r\n\r\n if(contentBlockLayouts === 'twoColLeft' || contentBlockLayouts === 'twoColRight') {\r\n contentBlockLayout = contentBlockLayouts === 'twoColLeft' ? `${styles}twoCol-left` : `${styles}twoCol-right`;\r\n }\r\n\r\n\r\n if (imageLink) {\r\n return (\r\n \r\n \r\n ) => {\r\n event.preventDefault();\r\n handleAnalytics();\r\n }}\r\n className={classnames(imageContainer.className, contentBlockImage)}\r\n >\r\n {currentImage}\r\n \r\n \r\n \r\n {title}\r\n {text}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n {currentImage}\r\n \r\n \r\n {title}\r\n {text}\r\n ) => {\r\n event.preventDefault();\r\n handleAnalytics();\r\n }}\r\n onMouseDown={(event: React.MouseEvent) => {\r\n event.preventDefault();\r\n }}\r\n className={classnames(detailsContainer.className, contentBlockLink)}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n};\r\n\r\nexport default ContentBlockView;\r\n","import { IImageData } from '@msdyn365-commerce/core';\r\nimport { ITealiumEventData, ITealiumPromotionData } from '../../definition-extensions/content-block.ext.props.autogenerated';\r\n\r\nexport const getPromoAnalyticsConfig = (image: IImageData | undefined, link: string | undefined, pagePath: string, paragraphText: string, tealiumPromotion: ITealiumPromotionData | undefined, isCategoryBanner?: boolean, headerText?: string) => {\r\n // Use Configured Paragraph text as Promotion Name\r\n let promoName;\r\n if (isCategoryBanner) {\r\n promoName = tealiumPromotion?.promotion_name || headerText || image?.title || image?.altText || '';\r\n } else {\r\n promoName = tealiumPromotion?.promotion_name || paragraphText;\r\n }\r\n // Use Configured Link as Promotion ID\r\n const promoID = tealiumPromotion?.promotion_id || link || '';\r\n // Use Configured Image URL as default Creative\r\n const promoCreative = tealiumPromotion?.promotion_creative_version || image?.title || image?.altText || '';\r\n const promoPosition = tealiumPromotion?.promotion_position || (isCategoryBanner ? '1' : undefined);\r\n\r\n return {\r\n eventLabel: `${promoName} from ${pagePath}`,\r\n promotionName: [promoName],\r\n promotionId: [promoID],\r\n promotionCreative: [promoCreative],\r\n promotionPosition: [promoPosition]\r\n };\r\n};\r\n\r\nexport const getAnalyticsConfig = (pagePath: string, heading: string | undefined, imageAriaLabel: string | undefined, tealiumEvent: ITealiumEventData | undefined) => {\r\n return {\r\n eventName: tealiumEvent?.event || 'content-block',\r\n eventCategory: tealiumEvent?.event_category || `${heading ? heading : imageAriaLabel} container`,\r\n eventType: tealiumEvent?.event_type || '',\r\n eventAction: tealiumEvent?.event_action || `${heading ? heading : imageAriaLabel} click`,\r\n eventLabel: tealiumEvent?.event_label || pagePath\r\n };\r\n};","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['content-block'] = {\n c: () => require('@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'content-block',\n p: 'content-block',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block'\n });\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|mattressfirm|views|content-block'] = {\n c: () => require('partner/themes/mattressfirm/views/content-block.view.tsx'),\n cn: '__local__-__local__-content-block'\n };\nviewDictionary['@msdyn365-commerce-modules|content-block|modules|content-block|content-block'] = {\n c: () => require('@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block.view.js'),\n cn: '@msdyn365-commerce-modules-content-block-content-block'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\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';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../content-block.props.autogenerated';\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Component props.\n */\nexport interface IContentBlockAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData[] | undefined;\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content view props.\n */\nexport interface IContentBlockAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Item view props.\n */\nexport interface IContentBlockAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-content-block__details__additional-content-cta-links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Content block additonal content item props.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns IContentBlockAdditionalContentItemViewProps.\n */\nconst assembleNode = (\n item: IAdditionalContentData,\n props: IContentBlockAdditionalContentProps,\n itemIndex: number\n): IContentBlockAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, itemIndex, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\n };\n};\n\n/**\n * ContentBlockAdditionalContent component.\n * @param props - Content Block Additional content component props.\n * @returns Content Block Additional content view props.\n */\nexport const contentBlockAdditionalContent = (\n props: IContentBlockAdditionalContentProps\n): IContentBlockAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\n additionalContent.map((item, index: number) => {\n return reactNodes.push(assembleNode(item, props, index));\n });\n\n return {\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\n additionalContentItems: reactNodes\n };\n};\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';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../content-block.props.autogenerated';\n\nexport interface IContentCardLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n role?: string;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class ContentCardLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n
\n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n
\n );\n }\n\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: btnClass,\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: this.props.role,\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\nexport default ContentCardLinks;\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';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport LinksComponent from './components/links';\nimport { actionableRegion as region, IContentBlockConfig, IContentBlockProps } from './content-block.props.autogenerated';\n\nexport interface IContentBlockViewProps extends IContentBlockProps<{}> {\n title?: React.ReactNode;\n text?: React.ReactNode;\n image?: React.ReactNode;\n links?: React.ReactNode;\n className?: string;\n contentBlockContainer: IModuleProps;\n imageContainer: INodeProps;\n detailsContainer: INodeProps;\n contentBlockAnchorTag?: INodeProps;\n imageLink?: string;\n imageAriaLabel?: string;\n additionalContent?: IContentBlockAdditionalContentViewProps;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleAdditionalLinkTextChange?(): void;\n}\n\n/**\n * Site-builder configuration for the module.\n */\nexport interface IContentBlockFullConfig extends IContentBlockConfig {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\n msdyn365__moduleLayout?: string;\n}\n\n/**\n * ContentCard component.\n * @extends {React.PureComponent}\n */\nexport class ContentBlock extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { heading, paragraph, image, links, className, imageAriaLabel } = this.props.config;\n const contentBlockTitle = heading && (\n \n );\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings ?? {},\n imageSettings: image?.imageSettings\n };\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n const contentBlockText = paragraph && (\n \n );\n const contentBlockImage = (\n \n );\n\n if (!contentBlockTitle && !contentBlockText && !contentBlockLinks) {\n this.props.context.telemetry.error('Content block content is empty, module wont render.');\n return null;\n }\n const contentBlockviewProps = {\n ...this.props,\n title: contentBlockTitle,\n text: contentBlockText,\n image: contentBlockImage,\n links: contentBlockLinks,\n moduleClass: this.props.config.className,\n contentBlockContainer: {\n moduleProps: this.props,\n className: classnames('ms-content-block', className)\n },\n imageContainer: { className: 'ms-content-block__image' },\n detailsContainer: { className: 'ms-content-block__details' },\n contentBlockAnchorTag: {\n tag: 'a',\n className: 'ms-content-block__link',\n role: 'link'\n },\n imageLink: this._getImageLink(),\n imageAriaLabel,\n additionalContent: contentBlockAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n };\n\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\n }\n\n /**\n * To handle text change.\n * @param event - To handle text change event.\n * @name - HandleTextChange\n * @public\n * @returns - The Text value.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * To handle paragraph change.\n * @param event - To handle text change event.\n * @name - HandleParagraphChange\n * @public\n * @returns - The Paragraph value.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @returns - Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\n }\n }\n\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\n const additionalContentObject =\n (this.props.config.additionalContent &&\n ArrayExtensions.hasElements(this.props.config.additionalContent) &&\n this.props.config.additionalContent[Number(index)]) ||\n {};\n if (additionalContentObject.links) {\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].subtext = event.target.value;\n }\n }\n\n private _getImageLink(): string | null {\n const { imageLink, links, actionableRegion } = this.props.config;\n if (actionableRegion === region.imageAndLinks) {\n if (imageLink?.destinationUrl) {\n return imageLink.destinationUrl;\n } else if (links && ArrayExtensions.hasElements(links) && links[0].linkUrl) {\n return links[0].linkUrl.destinationUrl;\n }\n return null;\n }\n return null;\n }\n}\n\nexport default ContentBlock;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport { IContentBlockViewProps } from './content-block';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\nconst ContentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default ContentBlockView;\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","module.exports = React;","module.exports = ReactDOM;"],"names":["fireAnalyticsLink","searchTerm","searchType","eventName","eventCategory","eventAction","eventLabel","eventType","eventNoninteraction","enhancedAction","generalConfig","promoConfig","productConfig","customerConfig","productImpressionConfig","callUtagLink","event","event_category","event_action","event_label","event_type","event_noninteraction","enhanced_action","search_term","search_type","htmltoText","html","MsDyn365","tempDivElement","document","createElement","innerHTML","textContent","innerText","firePromotionImpression","promotionName","promotionId","promotionCreative","promotionPosition","promotion_impression_name","promotion_impression_id","promotion_impression_creative","promotion_impression_position","firePromotionClick","promotion_name","promotion_id","promotion_creative","promotion_position","callUtag","async","objToCall","Object","keys","forEach","key","utag","global","hasOwnProperty","link","e","console","log","callUtagView","view","getResponsiveFromSeoData","desktop","tablet","mobile","query","React","src","media","srcSet","className","alt","altText","getResponsiveImage","defaultImg","lazyload","imageSettings","disableLazyLoad","defaultImgSrc","quality","getDynamicImageSettings","moduleName","viewports","undefined","themeSettingsForModule","mattressfirm","modules","themeSettingsForLayout","properties","dynamic","imageViewportProperties","_get","_cloneDeep","canonicalURL","requestContext","requestUrl","url","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","join","filteredURL","length","filter","urlPart","indexOf","removeKeywordFromUrl","app","config","removeKeywordFromUrlArray","trim","_part","removeKeyword","trimmedKeyword","indexOfValue","getSortedVirtualRefinerConfig","isMattressesCategory","appConfigSorted","getVirtualRefinerConfig","appConfig","enableForMattresses","enableForOtherCategories","sort","a","b","order","getVirtualRefinerNames","sortedVirtualRefinerConfig","appConfigRefinerNames","sortedConfig","push","refinerName","urlModifications","getVirtualRefinerValues","virtualRefiners","virtualRefinerValues","categoryIdToken","urlTokens","recordId","finalizedUrlParts","plainUrlPart","decodeURIComponent","part","filteredPart","mainRefiner","Values","refinerValue","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","linkBase","linkParams","endsWith","linkParam","map","param","includeConfigList","includeConfig","RegExp","ContentCardLinks","constructor","_mapEditableLinks","linkdata","editableLinks","index","payLoad","getPayloadObject","this","props","telemetryContent","linkText","contentAction","etext","attributes","getTelemetryAttributes","btnClass","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onClick","onTelemetryClick","render","links","Msdyn365","editProps","onTextChange","contentBlockContainer","imageContainer","detailsContainer","title","text","image","contentBlockAnchorTag","imageLink","imageAriaLabel","dynamicImages","useDynamicImages","contentBlockStyles","contentBlockLayouts","tealiumEvent","enhancedEcommTracking","tealiumPromotion","paragraph","heading","pagePath","window","location","href","host","includes","paragraphText","toString","analyticsConfig","getAnalyticsConfig","promoAnalyticsConfig","getPromoAnalyticsConfig","isPromotion","styles","handleAnalytics","context","request","open","currentImage","desktopImage","tabletImage","mobileImage","imageSettingViewports","handleLinkTextChange","linkIndex","target","value","getTelemetryObject","telemetryPageName","friendlyName","telemetry","ref","inView","useInView","triggerOnce","rootMargin","contentBlockStyle","contentBlockLink","contentBlockImage","contentBlockLayout","Module","classnames","Node","preventDefault","LinksComponent","onMouseDown","isCategoryBanner","headerText","promoName","promotion_creative_version","binding","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","assembleNode","item","itemIndex","additionalContentHeading","tag","onEdit","handleAdditionalTextChange","renderHeading","subtext","additionalContentParagraphText","renderParagraph","ctaLink","handleAdditionalLinkTextChange","renderLinks","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","additionalContentNode","additionalContentItems","ContentBlock","handleTextChange","handleParagraphChange","Number","contentBlockTitle","imageProps","gridSettings","contentBlockLinks","ArrayExtensions","msdyn365__moduleLayout","contentBlockText","preserveImageSpace","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","error","contentBlockviewProps","moduleClass","moduleProps","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","renderView","additionalContentObject","actionableRegion","renderAdditionalContent","call","fixRegExpWellKnownSymbolLogic","anObject","isNullOrUndefined","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","matcher","string","rx","S","res","done","fullUnicode","unicode","lastIndex","result","A","matchStr","apply","uncurryThis","isRegExp","speciesConstructor","arraySlice","callRegExpExec","regexpExec","stickyHelpers","fails","UNSUPPORTED_Y","MAX_UINT32","min","Math","$push","exec","stringSlice","slice","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","flags","ignoreCase","multiline","sticky","lastLastIndex","separatorCopy","source","splitter","C","unicodeMatching","q","z","i","re","originalExec","arguments","module","exports","ReactDOM"],"sourceRoot":""}