{"version":3,"file":"static/js/372b64c696381b4e36fe.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/data-actions/get-seo-data.action.ts?b8ff","webpack://mattressfirm/./src/modules/mfrm-buybox/list-page-state-buybox.ts?792c","webpack://mattressfirm/./src/modules/mfrm-category-page-summary/mfrm-category-page-summary.action.ts?d22e","webpack://mattressfirm/./src/modules/mfrm-utag-data/mfrm-utag-data.tsx?9fcd","webpack://mattressfirm/./src/modules/mfrm-utag-data/mfrm-utag-data.props.autogenerated.ts?8d3d","webpack://mattressfirm/./src/modules/mfrm-utag-data/mfrm-utag-data.view.tsx?60c1","webpack://mattressfirm/./lib/mfrm-utag-data/module-registration.js?085c","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["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","/*---------------------------------------------------------------------------------------------\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","/*---------------------------------------------------------------------------------------------\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 { observable } from 'mobx';\r\n\r\n\r\n/**\r\n * ListPageState class\r\n */\r\nexport class ListPageStateBuyBox {\r\n @observable public variantId: string | undefined = '';\r\n @observable public itemId: string | undefined = '';\r\n @observable public name: string | undefined = '';\r\n @observable public categoryName: string | undefined = '';\r\n @observable public productBrandName: string | undefined = '';\r\n @observable public price: string | undefined = '';\r\n @observable public productUrl: string | undefined = '';\r\n @observable public productImageUrl: string | undefined = '';\r\n @observable public productSize: string | undefined = '';\r\n}\r\n\r\n/**\r\n * ListPageStateInput - action input\r\n */\r\nexport class ListPageStateBuyBoxInput implements IActionInput {\r\n public getCacheKey = () => `ListPageStateBuyBox`;\r\n public getCacheObjectType = () => 'ListPageStateBuyBox';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nexport async function listPageStateAction(\r\n input: ListPageStateBuyBoxInput,\r\n ctx: IActionContext\r\n): Promise {\r\n return new ListPageStateBuyBox();\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 ListPageStateBuyBoxInput();\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","/* tslint:disable: no-duplicate-imports */\r\nimport { IPageSummaryData } from '@msdyn365-commerce-modules/page-summary';\r\nimport { buildCacheKeyWithUrlTokens, CurrentCategoryInput, getCategoryUrl, getCurrentCategory } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CategoryHierarchy, IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getFriendlyName,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext,\r\n IRequestContext\r\n} from '@msdyn365-commerce/core';\r\nimport flatten from 'lodash/flatten';\r\n// VSI customization: 7924 Start\r\nimport getHtmlParserValue from '../../Utilities/get-html-parser-value';\r\nimport { canonicalURL, getSortedVirtualRefinerConfig, getVirtualRefinerNames, regExSpecialChars, removeKeywords } from '../../Utilities/plp-url-utils';\r\nimport getSEOData, { GetSeoDataInput } from '../../data-actions/get-seo-data.action';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { IMfrmCategoryPageSummaryConfig } from './mfrm-category-page-summary.props.autogenerated';\r\n// VSI customization: 7924 End\r\n\r\n/** Category Page Summary Input */\r\nexport class MFRMCategoryPageSummaryInput implements IActionInput {\r\n public requestContext: IRequestContext;\r\n public config: IMfrmCategoryPageSummaryConfig;\r\n constructor(config: IMfrmCategoryPageSummaryConfig, requestContext: IRequestContext) {\r\n this.config = config || {};\r\n this.requestContext = requestContext;\r\n }\r\n\r\n public getCacheObjectType = (): string => 'MFRMCategoryPageSummary';\r\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('MFRMCategoryPageSummary', this.requestContext)}-${this.requestContext?.url?.requestUrl?.pathname?.toLowerCase()}`;\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nconst createGetCurrentCategoryInput = (inputData: IActionContext): CurrentCategoryInput => {\r\n if (inputData && inputData.requestContext) {\r\n return new CurrentCategoryInput(inputData.requestContext);\r\n }\r\n\r\n throw new Error('Please specify categoryId query string in request.');\r\n};\r\n\r\nconst _getSEOMetaTagValue = (currentCategory: CategoryHierarchy, keyValue: string) => {\r\n return currentCategory?.ExtensionProperties?.find((attr) => attr.Key === keyValue)?.Value?.StringValue;\r\n};\r\n\r\nconst _getActiveRefiners = (refiners: IProductRefinerHierarchy[], requestContext: IRequestContext, CategoryHierarchy: any): string[] | undefined => {\r\n // get refiners from URL\r\n const configVirtualRefinerNames = getVirtualRefinerNames(requestContext, false);\r\n const filteredRefiners = refiners && refiners.filter((refiner) => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n // get category slug\r\n let slug = (CategoryHierarchy && CategoryHierarchy.Slug) || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(requestContext, false);\r\n if (sortedConfigValues && slug) {\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, requestContext);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n // path of URL\r\n let path = requestContext.url.requestUrl.pathname.toLowerCase();\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 path = path.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n pathArray = removeKeywords(path.split('\\/').splice(1), requestContext);\r\n path = pathArray.join('\\/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n let refinerParts: string[] = [];\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('/');\r\n }\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach(_slug => {\r\n refinerParts.forEach(refinerPart => {\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item.includes('-') ? item : item.split('-').join(' ')));\r\n });\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach(refinerSet => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase().replace(/\\&/g, 'and').replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase().replace(/\\&/g, 'and').replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString);\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // alpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 &&\r\n sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues.forEach(sortedConfigValue => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n // @ts-ignore\r\n finalRefiners.push(sortedValues[sortedRefinerName].join(' '));\r\n }\r\n });\r\n return finalRefiners;\r\n }\r\n return undefined;\r\n};\r\n\r\nasync function getAllRefinersAction(ctx: IActionContext): Promise {\r\n const searchCriteria = {\r\n SearchCondition: '*',\r\n Context: {\r\n ChannelId: ctx.requestContext.apiSettings.channelId,\r\n CatalogId: ctx.requestContext.apiSettings.catalogId\r\n }\r\n };\r\n return getProductSearchRefinersAsync({ callerContext: ctx }, searchCriteria).then(\r\n (productRefiners: ProductRefiner[]) => {\r\n if (!productRefiners) {\r\n ctx.telemetry.error('[getRefinersByCriteriaAction] returned no refiners');\r\n return [];\r\n }\r\n\r\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\r\n\r\n if (result.length === 0) {\r\n ctx.telemetry.error('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\r\n return [];\r\n }\r\n\r\n return result;\r\n }\r\n ).catch((err) => {\r\n console.log('[getRefinersByCriteriaAction Category-page-summary] returned no IProductRefinerHierarchy objects', err);\r\n ctx.telemetry.error(`[getRefinersByCriteriaAction Category-page-summary] returned no IProductRefinerHierarchy objects ${err}`);\r\n return [];\r\n });\r\n}\r\n\r\nasync function getFallbackTitle(context: IActionContext, requestContext: IRequestContext, currentCategory: any): Promise {\r\n let activeRefinerList: string[] | undefined = [];\r\n return getAllRefinersAction(context).then(refiners => {\r\n activeRefinerList = _getActiveRefiners(refiners, requestContext, currentCategory);\r\n const concateTitle = `${activeRefinerList && activeRefinerList?.length > 0 ? activeRefinerList.length === 1 ? ` ${activeRefinerList[0]} ` : ` ${activeRefinerList?.join(' ')} ` : ''}`;\r\n const fallbackTitle = concateTitle && `Shop for${concateTitle}Products | Mattress Firm`;\r\n return fallbackTitle;\r\n }).catch((err) => {\r\n console.log('[getFallbackTitle Category-page-summary] has some errors', err);\r\n context.telemetry.error(`[getFallbackTitle Category-page-summary] has some errors- ${err}`);\r\n return \"\";\r\n });\r\n}\r\n\r\nconst action = async (input: MFRMCategoryPageSummaryInput, context: IActionContext): Promise => {\r\n const { config } = input;\r\n const seoInput = new GetSeoDataInput(context.requestContext.app.config.seoDataUrl || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MA5cA7');\r\n const seoData = await getSEOData(seoInput, context);\r\n const seoPageTitle = seoData && seoData['SEO State'] === 'Active' && seoData['Title Tag'];\r\n const seoPageMetaData = seoData && seoData['SEO State'] === 'Active' && seoData['Meta Description'];\r\n let currentCategory: any;\r\n try {\r\n currentCategory = await getCurrentCategory(createGetCurrentCategoryInput(context), context);\r\n } catch (e) {\r\n // Do nothing, if the action fails fallback to values defined in data\r\n }\r\n if (currentCategory) {\r\n let categoryUrl: string | undefined;\r\n let fallbackTitle;\r\n if (!seoPageTitle) {\r\n fallbackTitle = await getFallbackTitle(context, input.requestContext, currentCategory);\r\n }\r\n const pageTitle = seoPageTitle || fallbackTitle || _getSEOMetaTagValue(currentCategory, 'CategoryPageTitle');\r\n const pageTitleParser = getHtmlParserValue(pageTitle);\r\n\r\n const fallBackMeta = 'Find comfortable mattresses, high quality beds, and accessories from top brands all at great low prices at Mattress Firm';\r\n const categoryPageMetaData = seoPageMetaData || fallBackMeta || _getSEOMetaTagValue(currentCategory, 'CategoryPageMetaData');\r\n const categoryPageMetaDataParser = getHtmlParserValue(categoryPageMetaData);\r\n try {\r\n // reset category's name neutralizedName\r\n const localName = getFriendlyName(context.requestContext.locale, currentCategory.NameTranslations);\r\n const neutralizedName = currentCategory.NeutralizedName || currentCategory.Name;\r\n currentCategory.Name = localName;\r\n currentCategory.NeutralizedName = neutralizedName;\r\n categoryUrl = getCategoryUrl(currentCategory);\r\n // @ts-ignore - TODO: property exits in new version of SDK. Remove once released.\r\n const canonicalDomain = context.requestContext.canonicalDomain;\r\n if (categoryUrl && canonicalDomain) {\r\n categoryUrl = canonicalURL(context.requestContext).toLocaleLowerCase();\r\n } else {\r\n categoryUrl = undefined;\r\n }\r\n } catch (e) {\r\n categoryUrl = undefined;\r\n }\r\n return {\r\n title: pageTitleParser || currentCategory.Name,\r\n description: categoryPageMetaDataParser || '',\r\n sharingImageUrl: currentCategory.OfflineImage,\r\n canonicalUrl: categoryUrl,\r\n faviconUrl: config && config.faviconUrl\r\n };\r\n // If the action fails fallback to values defined from data\r\n } else if (config) {\r\n return {\r\n title: config.title,\r\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\r\n faviconUrl: config && config.faviconUrl\r\n };\r\n } else {\r\n return {};\r\n }\r\n};\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/page-summary/category-page-summary',\r\n action: >action,\r\n input: (args: ICreateActionContext) => {\r\n return new MFRMCategoryPageSummaryInput(args.config, args.requestContext);\r\n }\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IMfrmUtagDataProps } from './mfrm-utag-data.props.autogenerated';\r\n\r\nexport interface IMfrmUtagDataViewProps extends IMfrmUtagDataProps<{}> {}\r\n\r\n/**\r\n *\r\n * MfrmUtagData component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass MfrmUtagData extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default MfrmUtagData;\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 * IMfrmUtagData scriptModule 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 pageType {\r\n home = 'home',\r\n product = 'product',\r\n category = 'category',\r\n search = 'search',\r\n content = 'content',\r\n shopping_guides = 'shopping_guides',\r\n brand = 'brand',\r\n holiday = 'holiday',\r\n sale = 'sale',\r\n checkout = 'checkout',\r\n confirmation = 'confirmation',\r\n cart = 'cart',\r\n orderconfirmation = 'orderconfirmation',\r\n error = 'error'\r\n}\r\n\r\nexport const enum pageContextType {\r\n product = 'product',\r\n search = 'search',\r\n content = 'content',\r\n storefront = 'storefront',\r\n cart = 'cart',\r\n sale = 'sale',\r\n checkout = 'checkout',\r\n orderconfirmation = 'orderconfirmation',\r\n error = 'error',\r\n compare = 'compare',\r\n myaccount = 'myaccount',\r\n haulaway = 'haulaway',\r\n orderhistory = 'orderhistory'\r\n}\r\n\r\nexport interface IMfrmUtagDataConfig {\r\n pageType?: pageType;\r\n pageContextType?: pageContextType;\r\n}\r\n\r\nexport interface IMfrmUtagDataProps extends Msdyn365.IModule {\r\n config: IMfrmUtagDataConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { isNonceEnabled, SDK_FRAGMENT_NAME } from '@msdyn365-commerce/core-internal';\r\nimport * as React from 'react';\r\nimport { IMfrmUtagDataViewProps } from './mfrm-utag-data';\r\nimport { IMfrmUtagDataData } from './mfrm-utag-data.data';\r\nimport { IMfrmUtagDataProps, pageType as PageTypeOptions } from './mfrm-utag-data.props.autogenerated';\r\n\r\nexport default (props: IMfrmUtagDataProps) => {\r\n const source = getPageScript(props);\r\n const nonceToken = props.context && isNonceEnabled(props.context.request);\r\n const scriptHtml = ``;\r\n\r\n // tslint:disable-next-line: react-no-dangerous-html\r\n return React.createElement(SDK_FRAGMENT_NAME, { key: props.id, dangerouslySetInnerHTML: { __html: scriptHtml } });\r\n};\r\n\r\nconst getPageScript = (props: IMfrmUtagDataProps) => {\r\n // Build an array of utag data.\r\n const utag_extra = ['...utag_data', 'new_site: newSiteCookie'];\r\n\r\n // Append values to utag array.\r\n const pageTypeVars = getPageTypeVars(props);\r\n !!pageTypeVars && utag_extra.push(pageTypeVars);\r\n\r\n const pageContextTypeVars = getPageContextTypeVars(props);\r\n !!pageContextTypeVars && utag_extra.push(pageContextTypeVars);\r\n\r\n const productTypeVars = getProductTypeVars(props);\r\n !!productTypeVars && utag_extra.push(productTypeVars);\r\n\r\n const pageNameVars = getPageNameVars(props);\r\n !!pageNameVars && utag_extra.push(pageNameVars);\r\n\r\n // Merge values using a comma as glue.\r\n return `${getCookieFunction()}utag_data = { ${utag_extra.join(', ')} };`;\r\n};\r\n\r\nconst getPageTypeVars = (props: IMfrmUtagDataViewProps) => {\r\n const { pageType } = props.config;\r\n\r\n if (pageType) {\r\n if (pageType === PageTypeOptions.search) {\r\n return `page_type: 'search', search_term: '${getSearchTerm(props)}'`;\r\n } else {\r\n return `page_type: '${pageType.toLowerCase()}'`;\r\n }\r\n } else {\r\n return '';\r\n }\r\n};\r\n\r\nconst getPageNameVars = (props: IMfrmUtagDataProps) => {\r\n const reqUrl = props.context.request.url.requestUrl.toString()?.split('?')[0];\r\n\r\n var pageNameToReturn = (a : string | undefined) => {\r\n return a?.replace(/'/g, \"\\\\'\");\r\n };\r\n\r\n if (reqUrl.endsWith('.c')) {\r\n return `page_name: '${pageNameToReturn(props.data.categoryPageSummary?.result?.title)}'`;\r\n } else if (reqUrl.endsWith('.p')) {\r\n return `page_name: '${pageNameToReturn(props.data.productPageSummary?.result?.title)}'`;\r\n } else {\r\n return `page_name: '${pageNameToReturn(props.context.request.telemetryPageName)}'`;\r\n }\r\n};\r\n\r\nconst getPageContextTypeVars = (props: IMfrmUtagDataViewProps) => {\r\n const { pageContextType } = props.config;\r\n\r\n if (pageContextType) {\r\n return `page_context_type: '${pageContextType.toLowerCase()}'`;\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\nconst getProductTypeVars = (props: IMfrmUtagDataProps) => {\r\n const pageType = props.config.pageType?.toLocaleLowerCase();\r\n\r\n if (pageType === 'checkout' || pageType === 'cart' || pageType === 'product') {\r\n //product category\r\n const productData = props.data.listPageStateBuyBox?.result;\r\n const productName = productData?.name?.replace(/\\'/g, `'`);\r\n const productCategory = productData?.categoryName?.replace(/\\'/g, `'`);\r\n const productBrand = productData?.productBrandName?.replace(/\\'/g, ``);\r\n if (productData && productData.itemId) {\r\n return `product_id: ['${productData.itemId}'],\r\n product_name: ['${productName}'],\r\n product_category: ['${productCategory}'],\r\n product_brand: ['${productBrand}'],\r\n product_variant: ['${productData.variantId}'],\r\n product_price: ['${productData.price}'],\r\n product_url:['${productData.productUrl}'],\r\n product_image_url: ['${productData.productImageUrl}'],\r\n product_size:['${productData.productSize}']`;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nconst getSearchTerm = (props: IMfrmUtagDataViewProps) => {\r\n return props.context.request.query?.q;\r\n};\r\n\r\nconst getCookieFunction = () => {\r\n // Build a cookie value getter in JS. We can't access the cookie data from this module.\r\n // Use the cookie values to set new_site and is_cart_active.\r\n return `\r\n let getCookieValue = (ck) => {\r\n let cookieValue,\r\n cookieKey = ck + '=',\r\n decodedCookie = decodeURIComponent(document.cookie),\r\n ca = decodedCookie.split(';');\r\n \r\n for (let i in ca)\r\n {\r\n // Trim left spaces\r\n let c = ca[i].replace(/^\\\\s+/, '');\r\n if (!!~c.indexOf(cookieKey)) {\r\n cookieValue = c.substring(cookieKey.length, c.length);\r\n }\r\n }\r\n \r\n return cookieValue;\r\n };\r\n\r\n var newSiteCookie = getCookieValue('d365_site') ? 'true' : 'false';\r\n var utag_data = typeof utag_data !== 'undefined' ? utag_data : {};\r\n const checkoutCheck = window.location.pathname.includes('checkout');\r\n const checkoutExpress = window.location.pathname.includes('paypal');\r\n var newCookies = getCookieValue('mfrm_basket_cookie');\r\n let basketNewObj = newCookies && JSON.parse(newCookies);\r\n\r\n var newCookiesProductUrl = getCookieValue('tealium_cart_products_url');\r\n var basketNewObjUrl = newCookiesProductUrl && JSON.parse(newCookiesProductUrl);\r\n\r\n var newCookiesProductData = getCookieValue('tealium_cart_products_details');\r\n var newCookiesProductDataObj = newCookiesProductData && JSON.parse(newCookiesProductData);\r\n\r\n var newCookiesProductQuantity = getCookieValue('tealium_cart_products_quantity');\r\n var newCookiesProductQuantityObj = newCookiesProductQuantity && JSON.parse(newCookiesProductQuantity);\r\n\r\n var newCookiesExpress = getCookieValue('express_funnel');\r\n utag_data.cart_product_id = newCookiesProductDataObj && newCookiesProductDataObj.productIDsArray;\r\n utag_data.cart_product_category = newCookiesProductDataObj && newCookiesProductDataObj.productCatgoryArray;\r\n utag_data.cart_product_name = newCookiesProductDataObj && newCookiesProductDataObj.productNameArray;\r\n utag_data.cart_product_quantity = newCookiesProductQuantityObj && newCookiesProductQuantityObj.productQuantity;\r\n utag_data.cart_product_variant = newCookiesProductDataObj && newCookiesProductDataObj.variantRecord;\r\n utag_data.cart_product_size = newCookiesProductDataObj && newCookiesProductDataObj.productSize;\r\n utag_data.cart_product_price = newCookiesProductDataObj && newCookiesProductDataObj.cartProductPriceArray;\r\n utag_data.cart_url = basketNewObjUrl && basketNewObjUrl.cartUrl;\r\n utag_data.cart_product_image_url = basketNewObjUrl && basketNewObjUrl.productImageUrl;\r\n utag_data.cart_product_url = basketNewObjUrl && basketNewObjUrl.productURL;\r\n utag_data.cart_total_quantity = newCookiesProductQuantityObj && newCookiesProductQuantityObj.quantity;\r\n utag_data.cart_subtotal = newCookiesProductQuantityObj && newCookiesProductQuantityObj.subTotal;\r\n utag_data.core_item_flag = newCookiesProductQuantityObj && newCookiesProductQuantityObj.isCoreItem;\r\n utag_data.funnel_type = newCookiesProductQuantityObj && newCookiesProductQuantityObj.funnelType;\r\n\r\n if(checkoutExpress) {\r\n utag_data.funnel_type = newCookiesExpress;\r\n }\r\n\r\n if(checkoutCheck) {\r\n utag_data.page_name = 'customer info';\r\n utag_data.product_discount = newCookiesProductDataObj && newCookiesProductDataObj.productDiscountArray;\r\n utag_data.product_brand = newCookiesProductDataObj && newCookiesProductDataObj.productBrandName;\r\n utag_data.product_id = newCookiesProductDataObj && newCookiesProductDataObj.productIDsArray;\r\n utag_data.product_category = newCookiesProductDataObj && newCookiesProductDataObj.productCatgoryArray;\r\n utag_data.product_name = newCookiesProductDataObj && newCookiesProductDataObj.productNameArray;\r\n utag_data.product_quantity = newCookiesProductQuantityObj && newCookiesProductQuantityObj.productQuantity;\r\n utag_data.product_variant = newCookiesProductDataObj && newCookiesProductDataObj.variantRecord;\r\n utag_data.product_size = newCookiesProductDataObj && newCookiesProductDataObj.productSize;\r\n utag_data.product_price = newCookiesProductDataObj && newCookiesProductDataObj.productPriceArray;\r\n utag_data.product_image_url = basketNewObjUrl && basketNewObjUrl.productImageUrl;\r\n utag_data.product_url = basketNewObjUrl && basketNewObjUrl.productURL;\r\n }\r\n\r\n utag_data.cart_product_image_url_1 = basketNewObjUrl && basketNewObjUrl.productImageUrl[0];\r\n utag_data.cart_product_image_url_2 = basketNewObjUrl && basketNewObjUrl.productImageUrl[1];\r\n utag_data.cart_product_image_url_3 = basketNewObjUrl && basketNewObjUrl.productImageUrl[2];\r\n\r\n utag_data.cart_product_name_1 = newCookiesProductDataObj && newCookiesProductDataObj.productNameArray[0];\r\n utag_data.cart_product_name_2 = newCookiesProductDataObj && newCookiesProductDataObj.productNameArray[1];\r\n utag_data.cart_product_name_3 = newCookiesProductDataObj && newCookiesProductDataObj.productNameArray[2];\r\n\r\n if(!basketNewObj || basketNewObj.cartDataInfo?.length === 0) {\r\n [\r\n 'cart_product_id',\r\n 'cart_product_category',\r\n 'cart_product_name',\r\n 'cart_product_price',\r\n 'cart_product_quantity',\r\n 'cart_product_variant',\r\n 'cart_product_size',\r\n 'cart_product_image_url',\r\n 'cart_product_url',\r\n 'cart_total_quantity',\r\n 'cart_subtotal',\r\n 'cart_product_name_1',\r\n 'cart_product_name_2',\r\n 'cart_product_name_3',\r\n 'cart_product_image_url_1',\r\n 'cart_product_image_url_2',\r\n 'cart_product_image_url_3',\r\n 'cart_url',\r\n 'core_item_flag',\r\n 'funnel_type'\r\n ].forEach(e => delete utag_data[e]);\r\n \r\n }\r\n utag_data.is_cart_active = (\r\n (basketCookie) => {\r\n let basketCookieObj = basketCookie && JSON.parse(basketCookie);\r\n if(basketCookieObj) {\r\n return basketCookieObj.cartDataInfo?.length > 0 ? \"true\" : \"false\";\r\n }\r\n \r\n return \"false\";\r\n })(getCookieValue('mfrm_basket_cookie'));\r\n `;\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['mfrm-utag-data'] = {\n c: () => require('partner/modules/mfrm-utag-data/mfrm-utag-data.tsx'),\n $type: 'scriptModule',\n da: [{name:'categoryPageSummary', path:'modules/mfrm-category-page-summary/mfrm-category-page-summary.action', runOn: 0},{name:'listPageStateBuyBox', path:'modules/mfrm-buybox/list-page-state-buybox', runOn: 0},{name:'productPageSummary', path:'modules/mfrm-product-page-summary/mfrm-product-page-summary.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-utag-data',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-utag-data'\n });\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-buybox/list-page-state-buybox';\n let dataAction = require('partner/modules/mfrm-buybox/list-page-state-buybox');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-category-page-summary/mfrm-category-page-summary.action';\n let dataAction = require('partner/modules/mfrm-category-page-summary/mfrm-category-page-summary.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-product-page-summary/mfrm-product-page-summary.action';\n let dataAction = require('partner/modules/mfrm-product-page-summary/mfrm-product-page-summary.action');\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|mfrm-utag-data|mfrm-utag-data'] = {\n c: () => require('partner/modules/mfrm-utag-data/mfrm-utag-data.view.tsx'),\n cn: '__local__-__local__-mfrm-utag-data'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["canonicalURL","requestContext","requestUrl","url","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","filteredPath","join","filteredURL","undefined","length","filter","urlPart","indexOf","removeKeywordFromUrl","app","config","removeKeywordFromUrlArray","trim","forEach","_part","removeKeyword","trimmedKeyword","indexOfValue","getSortedVirtualRefinerConfig","isMattressesCategory","appConfigSorted","getVirtualRefinerConfig","appConfig","enableForMattresses","enableForOtherCategories","sort","a","b","order","getVirtualRefinerNames","sortedVirtualRefinerConfig","appConfigRefinerNames","sortedConfig","push","refinerName","urlModifications","async","getVirtualRefinerValues","virtualRefiners","virtualRefinerValues","categoryIdToken","urlTokens","recordId","finalizedUrlParts","plainUrlPart","decodeURIComponent","part","filteredPart","mainRefiner","Values","refinerValue","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","link","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","ListPageStateBuyBox","variantId","itemId","name","categoryName","productBrandName","price","productUrl","productImageUrl","productSize","__decorate","observable","ListPageStateBuyBoxInput","listPageStateAction","createListPageInput","createObservableDataAction","MFRMCategoryPageSummaryInput","buildCacheKeyWithUrlTokens","_getSEOMetaTagValue","currentCategory","keyValue","ExtensionProperties","find","attr","Key","Value","StringValue","getFallbackTitle","context","activeRefinerList","searchCriteria","SearchCondition","Context","ChannelId","apiSettings","channelId","CatalogId","catalogId","getProductSearchRefinersAsync","callerContext","then","productRefiners","telemetry","error","result","productRefiner","catch","err","console","log","getAllRefinersAction","refiners","CategoryHierarchy","configVirtualRefinerNames","filteredRefiners","refiner","KeyName","slugArray","pathArray","slug","Slug","sortedConfigValues","categoryId","removedCategorySlug","refinerParts","_slug","refinerPart","index","finalRefinerParts","item","includes","flatten","sortedValues","refinerSet","toLocaleLowerCase","sortedValue","Object","keys","finalRefiners","sortedConfigValue","sortedRefinerName","_getActiveRefiners","concateTitle","id","seoInput","getSEOData","seoPageTitle","seoPageMetaData","getCurrentCategory","CurrentCategoryInput","Error","createGetCurrentCategoryInput","e","categoryUrl","fallbackTitle","pageTitle","pageTitleParser","getHtmlParserValue","fallBackMeta","categoryPageMetaData","categoryPageMetaDataParser","localName","getFriendlyName","locale","NameTranslations","neutralizedName","NeutralizedName","Name","getCategoryUrl","canonicalDomain","title","description","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","src","args","MfrmUtagData","React","render","props","renderView","pageType","pageContextType","source","getPageScript","nonceToken","isNonceEnabled","request","scriptHtml","SDK_FRAGMENT_NAME","key","dangerouslySetInnerHTML","__html","utag_extra","pageTypeVars","getPageTypeVars","pageContextTypeVars","getPageContextTypeVars","productTypeVars","getProductTypeVars","pageNameVars","getPageNameVars","getCookieFunction","PageTypeOptions","getSearchTerm","reqUrl","toString","pageNameToReturn","categoryPageSummary","productPageSummary","telemetryPageName","productData","listPageStateBuyBox","productName","productCategory","productBrand","query","q","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}