{"version":3,"file":"static/js/66f0681225f3907ab83c.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/data-actions/get-seo-data.action.ts?b8ff","webpack://mattressfirm/./src/modules/single-category-banner/components/links.tsx?b521","webpack://mattressfirm/./src/modules/single-category-banner/list-page-state.ts?7c91","webpack://mattressfirm/./src/modules/single-category-banner/single-category-banner.props.autogenerated.ts?9db9","webpack://mattressfirm/./src/modules/single-category-banner/single-category-banner.tsx?bf33","webpack://mattressfirm/./src/modules/single-category-banner/single-category-banner.view.tsx?c40a","webpack://mattressfirm/./src/themes/mattressfirm/views/tealiumAnalytics/analytics.ts?3dfb","webpack://mattressfirm/./lib/single-category-banner/module-registration.js?5633","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}\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) { 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 return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n return new RegExp(pattern, 'gi');\r\n }\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\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { filteredURL } from '../Utilities/plp-url-utils';\r\n\r\nexport class GetSeoDataInput extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n\r\n private seoDataUrl: string = '';\r\n constructor(seoDataUrl: string) {\r\n super({ shouldCacheOutput: true, cacheObjectType: 'SeoDataCache', cacheKey: 'SeoDataCache' });\r\n this.seoDataUrl = seoDataUrl;\r\n }\r\n\r\n public getSeoDataUrl = () => this.seoDataUrl;\r\n public getCacheKey = () => `SeoDataCache`;\r\n public getCacheObjectType = () => 'SeoDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n\r\n}\r\n\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n if (inputData.config && inputData.config.seoDataUrl) {\r\n return new GetSeoDataInput(inputData.config.seoDataUrl);\r\n }\r\n return new GetSeoDataInput('');\r\n};\r\n\r\n// tslint:disable: no-any\r\nasync function action(input: GetSeoDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n\r\n const jsonUrlFromGlobals = ctx.requestContext.app.config.seoDataUrl;\r\n // TODO: Just remove the fallback\r\n const jsonUrl = jsonUrlFromGlobals || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MA5cA7';\r\n const res = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const filteredUrlPath = filteredURL(ctx.requestContext);\r\n const seoData = filteredUrlPath && res.data && res.data[filteredUrlPath];\r\n return seoData && seoData[0];\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n input: createInput\r\n});\r\n","/* eslint-disable no-duplicate-imports */\r\nimport { 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 { ILinksData } from '../single-category-banner.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: link.linkUrl.destinationUrl,\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 {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n/* tslint:disable: no-duplicate-imports */\r\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { observable } from 'mobx';\r\n\r\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\r\n\r\n/**\r\n * ListPageState class\r\n */\r\nexport class ListPageState {\r\n @observable public activeFilters: ProductRefinerValue[] | null = null;\r\n @observable public activeProducts: ProductSearchResult[] = [];\r\n}\r\n\r\n/**\r\n * ListPageStateInput - action input\r\n */\r\nexport class ListPageStateInput implements IActionInput {\r\n public getCacheKey = () => `ListPageState`;\r\n public getCacheObjectType = () => 'ListPageState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nexport async function listPageStateAction(\r\n input: ListPageStateInput,\r\n ctx: IActionContext\r\n): Promise {\r\n return new ListPageState();\r\n}\r\n\r\n/**\r\n * create new input for create action\r\n */\r\nexport const createListPageInput = (\r\n inputData: ICreateActionContext>\r\n): IActionInput => {\r\n return new ListPageStateInput();\r\n};\r\n\r\n/**\r\n * ListPageState - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >listPageStateAction,\r\n input: createListPageInput\r\n});\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISingleCategoryBanner contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum imagePosition {\r\n left = 'left',\r\n center = 'center',\r\n right = 'right'\r\n}\r\n\r\nexport const enum actionableRegion {\r\n imageAndLinks = 'imageAndLinks',\r\n linksOnly = 'linksOnly'\r\n}\r\n\r\nexport const enum enhancedEcommTracking {\r\n promotion = 'promotion'\r\n}\r\n\r\nexport interface ISingleCategoryBannerConfig extends Msdyn365.IModuleConfig {\r\n useSeoData?: boolean;\r\n useDynamicImages?: boolean;\r\n dynamicImages?: IDynamicImagesData;\r\n heading?: IHeadingData;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n links?: ILinksData[];\r\n imagePosition?: imagePosition;\r\n actionableRegion?: actionableRegion;\r\n imageLink?: Msdyn365.ILinkData;\r\n imageAriaLabel?: string;\r\n className?: string;\r\n categoryRecordId?: string;\r\n enhancedEcommTracking?: enhancedEcommTracking;\r\n tealiumEvent?: ITealiumEventData;\r\n tealiumPromotion?: ITealiumPromotionData;\r\n}\r\n\r\nexport interface IDynamicImagesData {\r\n desktopImage?: Msdyn365.IImageData;\r\n tabletImage?: Msdyn365.IImageData;\r\n mobileImage?: Msdyn365.IImageData;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface ITealiumEventData {\r\n event?: string;\r\n event_category?: string;\r\n event_action?: string;\r\n event_label?: string;\r\n}\r\n\r\nexport interface ITealiumPromotionData {\r\n promotion_name?: string;\r\n promotion_id?: string;\r\n promotion_creative_version?: string;\r\n promotion_position?: string;\r\n}\r\n\r\nexport interface ISingleCategoryBannerProps extends Msdyn365.IModule {\r\n config: ISingleCategoryBannerConfig;\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/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { IDynamicImagesData } from '../../themes/mattressfirm/definition-extensions/content-block.ext.props.autogenerated';\r\nimport LinksComponent from './components/links';\r\nimport { ISingleCategoryBannerData } from './single-category-banner.data';\r\nimport { actionableRegion as region, ILinksData, ISingleCategoryBannerProps } from './single-category-banner.props.autogenerated';\r\n\r\nexport interface IContentBlockViewProps extends ISingleCategoryBannerProps<{}> {\r\n title?: React.ReactNode;\r\n text?: React.ReactNode;\r\n image?: React.ReactNode;\r\n links?: ILinksData[];\r\n className?: string;\r\n contentBlockContainer: IModuleProps;\r\n imageContainer: INodeProps;\r\n detailsContainer: INodeProps;\r\n unbxdBannerHTML?: string;\r\n unbxdImageURL?: string;\r\n contentBlockAnchorTag?: INodeProps;\r\n useSeoData?: boolean;\r\n seoData?: any,\r\n useDynamicImages?: boolean;\r\n dynamicImages?: IDynamicImagesData;\r\n imageLink?: string;\r\n imageAriaLabel?: string;\r\n showServerSideBanner: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n handleTextChange?(): (event: Msdyn365.ContentEditableEvent) => string;\r\n}\r\n\r\ninterface ISingleCategoryBannerState {\r\n showServerSideBanner: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCard component\r\n * @extends {React.PureComponent}\r\n */\r\n\r\nclass ContentBlock extends React.PureComponent, ISingleCategoryBannerState> {\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n constructor(props: ISingleCategoryBannerProps) {\r\n super(props);\r\n this.state = {\r\n showServerSideBanner: false\r\n };\r\n }\r\n public componentDidMount(): void {\r\n const activeProducts = (this.props.data?.listPageState?.result && this.props.data?.listPageState?.result?.activeProducts) || [];\r\n const extProperties = activeProducts && activeProducts.length > 0 && activeProducts[0]?.ExtensionProperties;\r\n const unbxdImageURL = extProperties && extProperties?.find(obj => obj?.Key === 'ImageURL')?.Value?.StringValue;\r\n const unbxdBannerHTMLRaw = extProperties && extProperties?.find(obj => obj?.Key === 'BannerHTML')?.Value?.StringValue;\r\n if (!(unbxdBannerHTMLRaw && unbxdImageURL)) {\r\n this.setState({ showServerSideBanner: true });\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element | null {\r\n const {\r\n heading,\r\n paragraph,\r\n image,\r\n links,\r\n className,\r\n useDynamicImages,\r\n dynamicImages,\r\n imageAriaLabel,\r\n useSeoData\r\n } = this.props.config;\r\n const activeProducts = (this.props.data?.listPageState?.result && this.props.data?.listPageState?.result?.activeProducts) || [];\r\n const activeFilters = (this.props.data?.listPageState?.result && this.props.data?.listPageState?.result?.activeFilters) || [];\r\n const isShowUnbxdBanner = activeFilters?.length > 1 ? false : true;\r\n const extProperties = activeProducts && activeProducts.length > 0 && activeProducts[0]?.ExtensionProperties;\r\n const unbxdImageURL = extProperties && extProperties?.find(obj => obj?.Key === 'ImageURL')?.Value?.StringValue;\r\n const unbxdLandingURL = extProperties && extProperties?.find(obj => obj?.Key === 'LandingURL')?.Value?.StringValue;\r\n const unbxdBannerHTMLRaw = extProperties && extProperties?.find(obj => obj?.Key === 'BannerHTML')?.Value?.StringValue;\r\n\r\n const contentBlockTitle = heading && (\r\n \r\n );\r\n const imageProps = {\r\n gridSettings: this.props.context.request.gridSettings || {},\r\n imageSettings: image && image.imageSettings\r\n };\r\n const contentBlockLinks = links && links.length > 0 && (\r\n \r\n );\r\n const contentBlockText = paragraph && (\r\n \r\n );\r\n const contentBlockImage = image && (\r\n \r\n );\r\n if (\r\n !contentBlockTitle &&\r\n !contentBlockText &&\r\n !contentBlockImage &&\r\n !contentBlockLinks\r\n ) {\r\n this.props.context.telemetry.warning(\r\n 'Content block content is empty, module wont render.'\r\n );\r\n return null;\r\n }\r\n\r\n const contentBlockviewProps = {\r\n ...this.props,\r\n title: contentBlockTitle,\r\n text: contentBlockText,\r\n image: contentBlockImage,\r\n links: links,\r\n useSeoData: useSeoData,\r\n seoData: this.props.data.seoData?.result,\r\n useDynamicImages: useDynamicImages,\r\n dynamicImages: dynamicImages,\r\n moduleClass: this.props.config.className,\r\n contentBlockContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-content-block', className)\r\n },\r\n imageContainer: { className: 'ms-content-block__image' },\r\n detailsContainer: { className: 'ms-content-block__details' },\r\n contentBlockAnchorTag: {\r\n tag: 'a',\r\n className: 'ms-content-block__link',\r\n role: 'link'\r\n },\r\n imageLink: unbxdImageURL && unbxdLandingURL ? unbxdLandingURL : this._getImageLink(),\r\n imageAriaLabel,\r\n telemetryContent: this.telemetryContent,\r\n handleTextChange: this.handleLinkTextChange,\r\n unbxdBannerHTML: unbxdBannerHTMLRaw,\r\n unbxdImageURL: unbxdImageURL,\r\n showServerSideBanner: this.state.showServerSideBanner\r\n };\r\n\r\n let isUnbxdBannerExist = false;\r\n if (unbxdBannerHTMLRaw || unbxdImageURL) {\r\n isUnbxdBannerExist = true;\r\n }\r\n let showBanner = false;\r\n if (!isUnbxdBannerExist && this.props.config.categoryRecordId !== undefined && this.props.config.categoryRecordId !== '') {\r\n const splitCategoryId = this.props.config.categoryRecordId.split(',');\r\n if (splitCategoryId.length > 0) {\r\n splitCategoryId.map((item: string) => {\r\n if (this.props.context.actionContext.requestContext.url.requestUrl.pathname.includes(item)) {\r\n showBanner = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (isShowUnbxdBanner && (showBanner || isUnbxdBannerExist)) {\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n } else {\r\n return null;\r\n }\r\n }\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\r\n /* Handle link text change*/\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.links && this.props.config.links[linkIndex]) {\r\n this.props.config.links[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n private _getImageLink(): string | null {\r\n const { imageLink, links, actionableRegion } = this.props.config;\r\n if (actionableRegion === region.imageAndLinks) {\r\n if (imageLink && imageLink.destinationUrl) {\r\n return imageLink.destinationUrl;\r\n } else if (links && links.length && links[0].linkUrl) {\r\n return links[0].linkUrl.destinationUrl;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport default ContentBlock;\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/* tslint:disable: no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365, { IImageData } from '@msdyn365-commerce/core';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { useInView } from 'react-intersection-observer';\r\nimport { getPromoAnalyticsConfig } from '../../themes/mattressfirm/views/tealiumAnalytics/analytics';\r\nimport { fireAnalyticsLink, IAnalyticsConfiguration } from '../../Utilities/analytics/clickTrack';\r\nimport { htmltoText } from '../../Utilities/analytics/htmlToText';\r\nimport { firePromotionClick, firePromotionImpression } from '../../Utilities/analytics/promotionClickTrack';\r\nimport { getDynamicImageSettings, getResponsiveImage, getResponsiveFromSeoData } from '../../Utilities/get-dynamic-image';\r\nimport _getViewPort from '../../Utilities/get-view-port';\r\nimport LinksComponent from './components/links';\r\nimport { IContentBlockViewProps } from './single-category-banner';\r\n// tslint:disable-next-line: max-func-body-length cyclomatic-complexity\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 links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n useSeoData,\r\n seoData,\r\n useDynamicImages,\r\n dynamicImages,\r\n imageAriaLabel,\r\n unbxdBannerHTML,\r\n unbxdImageURL\r\n } = props;\r\n const { tealiumEvent, enhancedEcommTracking, tealiumPromotion, heading, paragraph } = props.config;\r\n\r\n const isPromotion = enhancedEcommTracking === 'promotion';\r\n const pagePath = MsDyn365.isBrowser ? (window.location.href?.split(location.host)[1]?.includes('?') ? window.location.href.split(location.host)[1].split('?')[0] : window.location.href.split(location.host)[1]) : '';\r\n const paragraphText = paragraph ? htmltoText(paragraph.toString()).trim() : '';\r\n let promoAnalyticsConfig = getPromoAnalyticsConfig(props.config.image, imageLink || links && links[0]?.linkUrl?.destinationUrl, pagePath, paragraphText, tealiumPromotion, true, heading?.text);\r\n\r\n const [ref, inView] = useInView({\r\n triggerOnce: true,\r\n rootMargin: '25px'\r\n });\r\n\r\n const handleAnalytics = (isImageClick?: boolean, ctaUrl?: string) => {\r\n if (MsDyn365.isBrowser) {\r\n const eventActionDefault = isImageClick ? 'image click' : 'CTA click';\r\n const categoryBannerAnalyticsConfig: IAnalyticsConfiguration = {\r\n eventName: tealiumEvent?.event || 'category-banner',\r\n eventCategory: tealiumEvent?.event_category || 'category page banner',\r\n eventAction: tealiumEvent?.event_action || eventActionDefault,\r\n eventLabel: tealiumEvent?.event_label || heading?.text\r\n };\r\n fireAnalyticsLink({ ...categoryBannerAnalyticsConfig });\r\n if (isPromotion) {\r\n if (!isImageClick) {\r\n promoAnalyticsConfig = getPromoAnalyticsConfig(props.config.image, ctaUrl, pagePath, paragraphText, tealiumPromotion, true, heading?.text);\r\n }\r\n promoAnalyticsConfig && firePromotionClick({ ...promoAnalyticsConfig });\r\n }\r\n\r\n if (imageLink) {\r\n window.location.href = imageLink;\r\n } else if (!isImageClick && ctaUrl) {\r\n window.location.href = ctaUrl;\r\n }\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (MsDyn365.isBrowser && isPromotion && inView) {\r\n promoAnalyticsConfig && firePromotionImpression({ ...promoAnalyticsConfig });\r\n }\r\n }, [inView]);\r\n\r\n let currentImage = image;\r\n\r\n if (useSeoData) {\r\n if (seoData && seoData['Banner State'].includes('Active')) {\r\n const desktopImage: IImageData = {\r\n src: seoData['Desktop Banner URL'],\r\n altText: seoData['H1 Tag'],\r\n title: seoData['H1 Tag']\r\n };\r\n const tabletImage: IImageData = {\r\n src: seoData['Tablet Banner URL'],\r\n altText: seoData['H1 Tag'],\r\n title: seoData['H1 Tag']\r\n };\r\n const mobileImage: IImageData = {\r\n src: seoData['Mobile Banner URL'],\r\n altText: seoData['H1 Tag'],\r\n title: seoData['H1 Tag']\r\n };\r\n\r\n currentImage = getResponsiveFromSeoData({\r\n desktop: desktopImage,\r\n tablet: tabletImage,\r\n mobile: mobileImage,\r\n imageSettingViewports: getDynamicImageSettings({ moduleName: 'mfrm-category-banner' })\r\n });\r\n }\r\n\r\n return (\r\n
{currentImage}
\r\n );\r\n } else if (unbxdImageURL || unbxdBannerHTML) {\r\n const unbxdImage = unbxdImageURL && (\r\n \r\n );\r\n return (\r\n \r\n \r\n \r\n {unbxdBannerHTML ? unbxdBannerHTML : unbxdImage}\r\n \r\n \r\n \r\n );\r\n // Only use Responsive Image if Dynamic Images are defined\r\n } else 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: 'mfrm-category-banner' })\r\n });\r\n }\r\n if (useDynamicImages) {\r\n return (\r\n
{currentImage}
\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(true, undefined);\r\n }}\r\n >\r\n {image}\r\n \r\n \r\n \r\n {title}\r\n {text}\r\n {links}\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {props.links && props.links.length > 0 && props.handleTextChange && props.telemetryContent &&\r\n , ctaUrl: string) => {\r\n event.preventDefault();\r\n handleAnalytics(false, ctaUrl);\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 const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['single-category-banner'] = {\n c: () => require('partner/modules/single-category-banner/single-category-banner.tsx'),\n $type: 'contentModule',\n da: [{name:'listPageState', path:'modules/single-category-banner/list-page-state', runOn: 0},{name:'seoData', path:'data-actions/get-seo-data.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'single-category-banner',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/single-category-banner'\n });\n \n\n {\n const sanitizedActionPath = 'data-actions/get-seo-data.action';\n let dataAction = require('partner/data-actions/get-seo-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/single-category-banner/list-page-state';\n let dataAction = require('partner/modules/single-category-banner/list-page-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\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__|modules|single-category-banner|single-category-banner'] = {\n c: () => require('partner/modules/single-category-banner/single-category-banner.view.tsx'),\n cn: '__local__-__local__-single-category-banner'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\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","alt","altText","getResponsiveImage","defaultImg","tabletWidth","lazyload","imageSettings","disableLazyLoad","defaultImgSrc","quality","className","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","filteredPath","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","filteredLink","includeConfigList","includeConfig","pattern","RegExp","GetSeoDataInput","Msdyn365","constructor","seoDataUrl","super","shouldCacheOutput","cacheObjectType","cacheKey","getSeoDataUrl","this","getCacheKey","getCacheObjectType","dataCacheType","action","input","ctx","jsonUrl","res","filteredUrlPath","seoData","data","inputData","ContentCardLinks","_mapEditableLinks","linkdata","editableLinks","index","payLoad","getPayloadObject","props","telemetryContent","linkText","contentAction","etext","attributes","getTelemetryAttributes","btnClass","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onClick","onTelemetryClick","render","links","editProps","onTextChange","ListPageState","activeFilters","activeProducts","__decorate","observable","ListPageStateInput","listPageStateAction","createListPageInput","createObservableDataAction","imagePosition","actionableRegion","enhancedEcommTracking","HeadingTag","ContentBlock","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","handleTextChange","heading","text","target","value","handleParagraphChange","paragraph","handleLinkTextChange","linkIndex","state","showServerSideBanner","componentDidMount","listPageState","result","extProperties","ExtensionProperties","unbxdImageURL","find","obj","Key","Value","StringValue","setState","image","useDynamicImages","dynamicImages","imageAriaLabel","useSeoData","isShowUnbxdBanner","unbxdLandingURL","unbxdBannerHTMLRaw","contentBlockTitle","tag","onEdit","imageProps","gridSettings","contentBlockLinks","LinksComponent","contentBlockText","contentBlockImage","warning","contentBlockviewProps","title","moduleClass","contentBlockContainer","moduleProps","classnames","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","unbxdBannerHTML","isUnbxdBannerExist","showBanner","categoryRecordId","splitCategoryId","item","actionContext","includes","renderView","region","tealiumEvent","tealiumPromotion","isPromotion","pagePath","window","location","href","host","paragraphText","toString","promoAnalyticsConfig","getPromoAnalyticsConfig","ref","inView","useInView","triggerOnce","rootMargin","handleAnalytics","isImageClick","ctaUrl","eventActionDefault","categoryBannerAnalyticsConfig","currentImage","desktopImage","tabletImage","mobileImage","imageSettingViewports","unbxdImage","Module","Node","preventDefault","onClickOverride","isCategoryBanner","headerText","promoName","promoID","promoCreative","promotion_creative_version","promoPosition","getAnalyticsConfig","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}