{"version":3,"file":"static/js/ca0282998638c729ecc7.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/emtpyChecker.ts?e2f5","webpack://mattressfirm/./src/Utilities/get-product-brand.tsx?2b65","webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/actions/srp-breadcrumb-page.action.ts?4397","webpack://mattressfirm/./src/data-actions/get-attributes-for-selected-variant.ts?4859","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/components/link.tsx?b62c","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/components/separator.tsx?9fd2","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/mfrm-breadcrumb.tsx?3d25","webpack://mattressfirm/./src/modules/mfrm-breadcrumb/mfrm-breadcrumb.view.tsx?73ef","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/base-collection-action.ts?d7f5","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/get-product-refiner-hierarchy.ts?fe25","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/get-refiners-for-collection.ts?0b98","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/url-utils.ts?05d8","webpack://mattressfirm/./src/modules/mfrm-search-result-container/list-page-state.ts?a8cb","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/CustomSkeleton/index.tsx?ef9d","webpack://mattressfirm/./lib/mfrm-breadcrumb/module-registration.js?3b9a","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["// tslint:disable\r\nexport const hasArray = (values: any): any[] | undefined => {\r\n return (typeof values !== 'string') && values && values.length ? values : undefined;\r\n};","import { IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport { IBrandListData } from '../modules/mfrm-buybox/mfrm-buybox.view';\r\nimport { IProductBonusWithBrandName } from '../modules/mfrm-cart/mfrm-cart';\r\nimport {hasArray} from './emtpyChecker';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nconst fallBackBrandAttribute = 'VENDOR BRAND';\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity\r\nexport const parseBrandData = (\r\n attributes: AttributeValue[] | undefined,\r\n backendAttribute: string,\r\n gridSettings: IGridSettings,\r\n renderBrandNameOnly: Boolean = false,\r\n brandList: IBrandListData[],\r\n imageSettings?: IImageSettings\r\n): JSX.Element | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attribute.toLowerCase().trim())\r\n ?.TextValue;\r\n\r\n if (renderBrandNameOnly) {\r\n return {productBrandName};\r\n }\r\n\r\n const selectedBrand =\r\n (brandList &&\r\n productBrandName &&\r\n brandList.find(\r\n (brand: IBrandListData) => brand && brand.brandName.toLowerCase().trim() === productBrandName.toLowerCase().trim()\r\n )) ||\r\n undefined;\r\n\r\n if (!selectedBrand) {\r\n return undefined;\r\n }\r\n\r\n const copySelectedBrand: IBrandListData = selectedBrand;\r\n // set alt text to brand name if no alt text is configured\r\n if (copySelectedBrand && _useDefaultAltText(copySelectedBrand) && copySelectedBrand.brandLogo) {\r\n copySelectedBrand.brandLogo.altText = productBrandName;\r\n }\r\n\r\n // set height to configured value or the default\r\n const height = copySelectedBrand && copySelectedBrand.logoHeight !== undefined ? copySelectedBrand.logoHeight : 22;\r\n const brandImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n lg: { q: `w=0&h=25&m=6`, w: 0, h: 25 },\r\n xl: { q: `w=0&h=25&m=6`, w: 0, h: 25 }\r\n },\r\n lazyload: false\r\n };\r\n\r\n const brandLogo = copySelectedBrand && copySelectedBrand.brandLogo && (\r\n \r\n );\r\n // place logo inside a link if configured to\r\n const brandLink =\r\n copySelectedBrand &&\r\n copySelectedBrand.brandLink &&\r\n copySelectedBrand.brandLink.linkUrl &&\r\n copySelectedBrand.brandLink.linkUrl.destinationUrl &&\r\n copySelectedBrand.brandLink;\r\n const linkElement = brandLink && (\r\n \r\n {brandLogo}\r\n \r\n );\r\n\r\n return linkElement || brandLogo;\r\n};\r\n// get only brandName\r\nexport const parseBrandName = (attributes: AttributeValue[] | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\nexport const parseBrandNameUnbxd = (attributes: any | undefined, backendAttribute: string, recordId?: number): string | undefined => {\r\n const attribute = backendAttribute || fallBackBrandAttribute;\r\n // let productBrandName = hasArray(attributes)?.find((currAttribute: AttributeValue) => currAttribute?.Name?.toLowerCase().trim() === attribute?.toLowerCase().trim())?.TextValue;\r\n let productBrandName = attributes && attributes[attribute];\r\n if (!productBrandName && MsDyn365.isBrowser) {\r\n const getLocalStorage = localStorage.getItem('bonusItmesWithBrand');\r\n let bonusItemArray: IProductBonusWithBrandName[] = [];\r\n if (getLocalStorage) {\r\n bonusItemArray = JSON.parse(getLocalStorage);\r\n }\r\n const checkBrandName = bonusItemArray.find(item => item.productId === recordId)?.brandName;\r\n if(checkBrandName) {\r\n productBrandName = checkBrandName;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get only brandName\r\nexport const getBrandNameCheck = (attributes: AttributeValue[] | undefined, backendAttribute: string): string | undefined => {\r\n const productBrandName =\r\n attributes &&\r\n attributes.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === backendAttribute.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!productBrandName) {\r\n return undefined;\r\n }\r\n return productBrandName;\r\n};\r\n\r\n// get the appropriate image alt text\r\nconst _useDefaultAltText = (selectedBrand: IBrandListData): boolean => {\r\n const configuredAltText = selectedBrand.brandLogo?.altText;\r\n return !(configuredAltText && configuredAltText.trim() && configuredAltText !== 'No Data Available');\r\n};\r\n","import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nexport interface IVirtualRefinersConfig {\r\n order: number;\r\n refinerName: string;\r\n enableForMattresses: boolean;\r\n enableForOtherCategories: boolean;\r\n allowDuplicate: boolean;\r\n}\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const origin = requestUrl.origin;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `${origin}/${filteredPath}`;\r\n};\r\n\r\nexport const filteredURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `/${filteredPath}`;\r\n};\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURLWithoutBaseUrl = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('\\/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n return urlParts?.join('\\/');\r\n};\r\n\r\n/**\r\n * This will remove the Pipe sign value set from urlParts\r\n * @param urlParts\r\n * @returns\r\n */\r\nexport const removePipeSignValue = (urlParts: string[]) => {\r\n // urlParts.forEach((part, index) => {\r\n // const indexOfValue = urlParts.indexOf('%7c');\r\n // if (indexOfValue !== -1) {\r\n // urlParts.splice(indexOfValue, 1);\r\n // }\r\n // });\r\n\r\n if (urlParts !== undefined && urlParts.length > 0) {\r\n urlParts = urlParts.filter(urlPart => urlPart.indexOf('%7c') === -1);\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will remove the keywords from urlParts array which were received from\r\n * the app.settings.json/CMS Extensions\r\n * @param urlParts\r\n * @param requestContext\r\n * @returns urlParts array filtered\r\n */\r\nexport const removeKeywords = (urlParts: string[], requestContext: IRequestContext): string[] => {\r\n const removeKeywordFromUrl = requestContext.app.config.removeKeywordFromUrl;\r\n\r\n if (urlParts.length > 0 && removeKeywordFromUrl && removeKeywordFromUrl.length > 0) {\r\n const removeKeywordFromUrlArray: string[] = removeKeywordFromUrl?.trim().split(',');\r\n removeKeywordFromUrlArray?.length > 0 &&\r\n urlParts.forEach(_part => {\r\n removeKeywordFromUrlArray.forEach(removeKeyword => {\r\n const trimmedKeyword = removeKeyword.trim().toLowerCase();\r\n const indexOfValue = urlParts.indexOf(trimmedKeyword);\r\n if (trimmedKeyword.length > 0 && indexOfValue !== -1) {\r\n urlParts.splice(indexOfValue, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will sort the Virtual refiner config based on order and return\r\n * only active virtual refiner configs based on isMattress category will\r\n * be returned\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getSortedVirtualRefinerConfig = (\r\n requestContext: IRequestContext,\r\n isMattressesCategory: boolean | undefined\r\n): IVirtualRefinersConfig[] | undefined => {\r\n let appConfigSorted = getVirtualRefinerConfig(requestContext);\r\n\r\n // sort the config by provided config\r\n if (appConfigSorted) {\r\n if (isMattressesCategory === true) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForMattresses;\r\n });\r\n } else if (isMattressesCategory === false) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForOtherCategories;\r\n });\r\n }\r\n appConfigSorted.sort((a: IVirtualRefinersConfig, b: IVirtualRefinersConfig) => {\r\n return a.order - b.order;\r\n });\r\n }\r\n\r\n return appConfigSorted;\r\n};\r\n\r\n/**\r\n * Virtual refiner names from the app.settings.json will be returned which can be used\r\n * to filter out refiners data based upon active virtual refiners\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns string[]\r\n */\r\nexport const getVirtualRefinerNames = (requestContext: IRequestContext, isMattressesCategory: boolean | undefined): string[] => {\r\n const sortedVirtualRefinerConfig = getSortedVirtualRefinerConfig(requestContext, isMattressesCategory);\r\n\r\n const appConfigRefinerNames: string[] = [];\r\n\r\n sortedVirtualRefinerConfig &&\r\n sortedVirtualRefinerConfig.forEach(sortedConfig => {\r\n appConfigRefinerNames.push(sortedConfig.refinerName.trim().toLowerCase());\r\n });\r\n\r\n return appConfigRefinerNames;\r\n};\r\n\r\n/**\r\n * This will return the value of virtual refiner configuration\r\n * @param requestContext\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getVirtualRefinerConfig = (requestContext: IRequestContext): IVirtualRefinersConfig[] => {\r\n return requestContext.app.config.urlModifications;\r\n};\r\n\r\nexport async function getVirtualRefinerValues(\r\n requestContext: IRequestContext,\r\n virtualRefiners: IProductRefinerHierarchy[]\r\n): Promise {\r\n const virtualRefinerValues: ProductRefinerValue[] = [];\r\n if (virtualRefiners.length === 0) {\r\n return virtualRefinerValues;\r\n }\r\n const requestUrl = requestContext.url.requestUrl;\r\n // const origin = requestUrl.origin;\r\n const path = requestUrl.pathname;\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n urlParts.splice(-1);\r\n }\r\n\r\n // run loop for each url part and get values from refiners for further usage\r\n const finalizedUrlParts: string[] = [];\r\n urlParts.forEach(plainUrlPart => {\r\n const urlPart = decodeURIComponent(plainUrlPart);\r\n if (urlPart.indexOf('|') !== -1) {\r\n const splitOnPipeSign = urlPart?.split('|');\r\n const filteredParts = splitOnPipeSign.filter(part => part.length > 0);\r\n filteredParts.forEach(filteredPart => {\r\n finalizedUrlParts.push(filteredPart.toLowerCase().trim());\r\n });\r\n }\r\n finalizedUrlParts.push(urlPart);\r\n });\r\n finalizedUrlParts.forEach((urlPart) => {\r\n virtualRefiners.forEach((mainRefiner) => {\r\n mainRefiner.Values.forEach((refinerValue) => {\r\n const refinerValueKeyName = refinerValue.LeftValueBoundString?.toLowerCase().trim().split(' ')?.join('-').replace(/\\&/g, 'and').replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-');\r\n if (refinerValueKeyName && refinerValueKeyName === urlPart) {\r\n virtualRefinerValues.push(refinerValue);\r\n }\r\n });\r\n });\r\n });\r\n\r\n return virtualRefinerValues;\r\n}\r\n\r\n/**\r\n * For navigation menu links, it will remove keywords configured in global configurations from the navigation link\r\n * and clp link and return url path string\r\n * @param link\r\n * @param requestContext\r\n * @returns string\r\n */\r\nexport const navLinkKeywordRemoval = (link: string, requestContext: IRequestContext): string => {\r\n // Using the rest operator in case there is a weirdly formatted URL with multiple question marks.\r\n const [linkBase, ...linkParams] = link?.split('?');\r\n\r\n // Only apply to category links and product links, which end in .c or .p. Check that a keyword is configured.\r\n if (!linkBase.endsWith('.c') && !linkBase.endsWith('.p') || !requestContext.app.config) {\r\n return link;\r\n }\r\n\r\n // Separate out url parts split on forward /\r\n let urlParts = linkBase?.split('\\/');\r\n\r\n // Remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // Glue the URL params back together\r\n const linkParam = linkParams.map(param => `?${param}`)?.join('');\r\n\r\n // Rebuild URL by joining with forward slash and appending any URL parameters\r\n const filteredLink = `${urlParts?.join('/')}${linkParam}`;\r\n return `${filteredLink}`;\r\n};\r\nexport const regExSpecialChars = (includeConfigList: string): RegExp => {\r\n let includeConfig = '';\r\n if (includeConfigList !== undefined && includeConfigList !== '') {\r\n includeConfig = includeConfigList?.trim().split(',')?.join('\\\\\\\\');\r\n includeConfig = includeConfig && includeConfig !== '' ? `\\\\\\\\${includeConfig}` : '';\r\n const pattern = `[^\\\\w\\\\&\\\\|${includeConfig}]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n }\r\n};\r\n","import * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface ISRPBreadcrumbState {\r\n breadcrumbCheck: boolean;\r\n}\r\n\r\n/**\r\n * SrpBreadcrumbPage Input Action\r\n */\r\nexport class SrpBreadcrumbPageInput implements Msdyn365.IActionInput {\r\n // Construct the input needed to run the action\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `BreadcrumbSrp`;\r\n public getCacheObjectType = () => 'BreadcrumbSrp';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface ISrpBreadcrumbPageData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new SrpBreadcrumbPageInput();\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: SrpBreadcrumbPageInput, ctx: Msdyn365.IActionContext): Promise {\r\n // const apiSettings = Msdyn365.msdyn365Commerce.apiSettings;\r\n\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return { breadcrumbCheck: false };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'SrpBreadcrumbPage',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","import {\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\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public catalogId: number;\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributesForSelectedVariant`;\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n } else {\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\r\n\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return getAttributeValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: AttributeValue[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n throw new Error(`[getPriceForSelectedVariantAction]Error executing action ${error.message}`);\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n","/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n index: string;\r\n noclick?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel, index, noclick, telemetryContent }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\r\n\r\n const linkText = text !== undefined ? text : '';\r\n payLoad.contentAction.etext = linkText;\r\n // Construct telemetry attribute to render\r\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\r\n\r\n return (\r\n \r\n {linkText}\r\n \r\n \r\n );\r\n};\r\n","/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface ISeparator {\r\n separator: string;\r\n}\r\n\r\nexport const Separator: React.FC = ({ separator }) => {separator} ;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { getVirtualRefinerNames, navLinkKeywordRemoval, regExSpecialChars, removeKeywords } from '../../Utilities/plp-url-utils';\r\nimport { Link } from './components/link';\r\nimport { Separator } from './components/separator';\r\nimport { IMfrmBreadcrumbData } from './mfrm-breadcrumb.data';\r\nimport { ILinksData, IMfrmBreadcrumbProps } from './mfrm-breadcrumb.props.autogenerated';\r\nimport { parseBrandName } from '../../Utilities/get-product-brand';\r\n\r\nexport interface IBreadcrumbViewProps extends IMfrmBreadcrumbProps {\r\n root?: React.ReactNode;\r\n isLoadedRoot?: boolean;\r\n links?: React.ReactNode[];\r\n backButton?: React.ReactNode;\r\n separator?: React.ReactNode;\r\n BreadcrumbContainer: IModuleProps;\r\n BreadcrumbList: INodeProps;\r\n BreadcrumbListItem: INodeProps;\r\n plpBreadcrumbSchema: string;\r\n pdpBreadcrumbSchema: string;\r\n}\r\ninterface ICategory {\r\n Name: string;\r\n Url: string;\r\n}\r\ninterface IConcatRefiners {\r\n concatRefinerCat: ICategory[];\r\n}\r\ninterface IUrlParts {\r\n realUrlParts: string[];\r\n refinerParts: string[];\r\n}\r\ninterface IBreadcrumbSchemaState {\r\n plpBreadcrumbSchema: string;\r\n}\r\ninterface IRootState {\r\n isLoadedRoot: boolean;\r\n}\r\n/**\r\n *\r\n * Breadcrumb component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass Breadcrumb extends React.PureComponent, IConcatRefiners & IBreadcrumbSchemaState & IRootState> {\r\n private _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n constructor(props: IMfrmBreadcrumbProps) {\r\n super(props);\r\n this.state = {\r\n concatRefinerCat: [],\r\n plpBreadcrumbSchema: '',\r\n isLoadedRoot: false\r\n };\r\n }\r\n public componentDidMount(): void {\r\n const categoryHierarchyTemp: ICategory[] = [];\r\n const { part, realUrlParts } = this._getUrlString();\r\n part &&\r\n part.split('/').forEach((st, index) => {\r\n const originalUrlPart = realUrlParts && realUrlParts[index];\r\n const url = this._getUrl(originalUrlPart);\r\n const refinerCat: ICategory = {\r\n Name: this._trimSpacesAndCapitalize(st.split('$$').join('/')),\r\n Url: url\r\n };\r\n categoryHierarchyTemp.push(refinerCat);\r\n });\r\n this.setState({ concatRefinerCat: categoryHierarchyTemp });\r\n }\r\n public componentDidUpdate(): void {\r\n const itemPosition = this._getRootLink() ? 1 : 0;\r\n const schema = this._makePlpBreadcrumbSchema(itemPosition);\r\n if (schema) {\r\n this.setState({\r\n plpBreadcrumbSchema: schema\r\n });\r\n }\r\n }\r\n public render(): JSX.Element | null {\r\n const { className } = this.props.config;\r\n let rootLink = null;\r\n let breadcrumbLinks = null;\r\n let backButtonComponent = null;\r\n rootLink = this._getRootLink();\r\n const itemPosition = rootLink ? 1 : 0;\r\n if (this._pageType === 'Category') {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n if (!breadcrumbLinks) {\r\n breadcrumbLinks = this._getCategoryHierarchy(itemPosition);\r\n }\r\n } else if (this._pageType === 'Product') {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n if (!breadcrumbLinks) {\r\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\r\n if (breaCrumbType === 'category') {\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n if (breaCrumbType === 'categoryAndBack') {\r\n backButtonComponent = this._getPDPBackButton();\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n if (breaCrumbType === 'back') {\r\n backButtonComponent = this._getPDPBackButton();\r\n if (backButtonComponent === null) {\r\n breadcrumbLinks = this._getPDPLinks(itemPosition);\r\n }\r\n }\r\n }\r\n } else {\r\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n }\r\n const linkSeparator = ;\r\n const breadcrumbViewProps = {\r\n ...this.props,\r\n BreadcrumbContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-breadcrumb', className),\r\n tag: 'nav',\r\n role: 'navigation'\r\n },\r\n BreadcrumbList: {\r\n tag: 'ol' as NodeTag,\r\n className: 'ms-breadcrumb_list'\r\n },\r\n BreadcrumbListItem: {\r\n tag: 'li',\r\n className: 'ms-breadcrumb_item'\r\n },\r\n root: rootLink,\r\n isLoadedRoot: this.state.isLoadedRoot,\r\n links: breadcrumbLinks,\r\n backButton: backButtonComponent,\r\n separator: linkSeparator,\r\n plpBreadcrumbSchema: this.state.plpBreadcrumbSchema ? this.state.plpBreadcrumbSchema : null,\r\n pdpBreadcrumbSchema: this._makePdpBreadcrumbSchema(itemPosition)\r\n };\r\n return this.props.renderView(breadcrumbViewProps) as React.ReactElement;\r\n }\r\n private _getRootLink = (): JSX.Element | null => {\r\n const { root } = this.props.config;\r\n if (!root || !root.linkUrl || !root.linkUrl.destinationUrl) {\r\n this.props.context.telemetry.error('BreadCrumb link url content is empty, link wont render');\r\n return null;\r\n }\r\n this.setState({\r\n isLoadedRoot: true\r\n });\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _makePlpBreadcrumbSchema(itemPosition: number): string | null {\r\n const homeUrl = this.props.context.request.url.requestUrl.origin;\r\n const { root } = this.props.config;\r\n const plpLinks = this._getCategoryHierarchy(itemPosition);\r\n let position = 1;\r\n const breadcrumbData = {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [{\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": homeUrl,\r\n \"name\": root?.linkText\r\n }\r\n }]\r\n };\r\n if (this._pageType === 'Category') {\r\n plpLinks?.map(plpLink => {\r\n const breadcrumbUrl = homeUrl.concat(plpLink.props.href);\r\n const modifiedBreadcrumbUrl = this.modifyBreadcrumbUrl(breadcrumbUrl);\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": modifiedBreadcrumbUrl,\r\n \"name\": plpLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n const searchQueryValue = this.props.context.request.query?.q;\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": `${homeUrl}/${searchQueryValue}`,\r\n \"name\": searchQueryValue && this._trimSpacesAndCapitalize(searchQueryValue)\r\n }\r\n });\r\n }\r\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\r\n const plpBreadcrumbSchemaData = JSON.stringify(breadcrumbData);\r\n return plpBreadcrumbSchemaData;\r\n }\r\n private _makePdpBreadcrumbSchema(itemPosition: number): string | null {\r\n const homeUrl = this.props.context.request.url.requestUrl.origin;\r\n const { root } = this.props.config;\r\n const pdpLinks = this._getPDPLinks(itemPosition);\r\n const breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\r\n let position = 1;\r\n const breadcrumbData = {\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"BreadcrumbList\",\r\n \"itemListElement\": [{\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": homeUrl,\r\n \"name\": root?.linkText\r\n }\r\n }]\r\n };\r\n if (this._pageType === 'Product') {\r\n pdpLinks?.map(pdpLink => {\r\n const pdpBreadcrumbUrl = pdpLink.props.href.includes(homeUrl) ? pdpLink.props.href : homeUrl.concat(pdpLink.props.href);\r\n const modifiedBreadcrumbUrl = this.modifyBreadcrumbUrl(pdpBreadcrumbUrl);\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": modifiedBreadcrumbUrl,\r\n \"name\": pdpLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n breadcrumbLinks?.map(breadcrumbLink => {\r\n breadcrumbData.itemListElement.push({\r\n \"@type\": \"ListItem\",\r\n \"position\": position++,\r\n \"item\": {\r\n \"id\": breadcrumbLink.props.href,\r\n \"name\": breadcrumbLink.props.text\r\n }\r\n });\r\n });\r\n }\r\n // Construct the JSON-LD data that contains the product metadata information used by search enginge crawlers\r\n const pdpBreadcrumbSchemaData = JSON.stringify(breadcrumbData);\r\n return pdpBreadcrumbSchemaData;\r\n }\r\n private modifyBreadcrumbUrl = (url: string): string => {\r\n const urlParts = url.split('\\/');\r\n urlParts.pop();\r\n const newUrl = urlParts?.join('\\/');\r\n return newUrl;\r\n };\r\n private _getCustomBreadcrumbLinks = (itemPosition: number): JSX.Element[] | null => {\r\n const { links } = this.props.config;\r\n\r\n if (!links || !(links.length > 0)) {\r\n this.props.context.telemetry.error('BreadCrumb links content is empty, links wont render');\r\n return null;\r\n }\r\n return links.map((value: ILinksData, index: number) => {\r\n itemPosition++;\r\n return (\r\n \r\n );\r\n });\r\n };\r\n private _makeRealUrlParts = (decodedArr: string[] | false | ''): IUrlParts => {\r\n let refinerParts: string[] = [];\r\n let realUrl = '';\r\n const realUrlParts: string[] = [];\r\n decodedArr &&\r\n decodedArr.forEach((part, index) => {\r\n switch (index) {\r\n case 0:\r\n realUrl = part;\r\n break;\r\n case 1:\r\n realUrl = `${part}`;\r\n break;\r\n case 2:\r\n realUrl = `${part}`;\r\n break;\r\n default:\r\n realUrl = '';\r\n }\r\n realUrlParts.push(realUrl);\r\n if (part.includes('|')) {\r\n refinerParts = [...refinerParts, ...part.split('|')];\r\n } else {\r\n refinerParts = [...refinerParts, part];\r\n }\r\n });\r\n return { realUrlParts, refinerParts };\r\n };\r\n private _getUrlString = (): { part: string; realUrlParts: string[] } => {\r\n const { data, context } = this.props;\r\n const requestContext = context && context.request;\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n let slug = (data.category.result && data.category.result.Slug) || '/search';\r\n let slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n const params = MsDyn365.isBrowser && window.location;\r\n const refinersString = params && params.pathname.replace(`/${slug}/`, '').replace(`/${categoryId}`, '');\r\n const decodedArr = refinersString && decodeURIComponent(refinersString).split('/');\r\n const { realUrlParts, refinerParts } = this._makeRealUrlParts(decodedArr);\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, true);\r\n const filteredRefiners =\r\n data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\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 &&\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.toLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase().replace(/\\&/g, 'and').replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.split('/').join('$$'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.split('/').join('$$'));\r\n }\r\n });\r\n });\r\n });\r\n\r\n // sort by configuration\r\n\r\n let str = '';\r\n let strNext = '';\r\n let breakAll = true;\r\n const virtualRefiners = [...configVirtualRefinerNames];\r\n configVirtualRefinerNames.forEach(item => {\r\n if (!sortedValues[item] || sortedValues[item]?.length < 1) {\r\n delete sortedValues[item];\r\n virtualRefiners.splice(virtualRefiners.indexOf(item), 1);\r\n }\r\n });\r\n\r\n virtualRefiners.every(item => {\r\n const sortedRefiners = sortedValues;\r\n const refiner = item;\r\n sortedRefiners[refiner]?.length < 1 ? delete sortedRefiners[refiner] : null;\r\n if (sortedRefiners[refiner]?.length < 2 && breakAll) {\r\n if (refiner === virtualRefiners[0] && sortedRefiners[refiner]?.length === 1) {\r\n str = `${sortedRefiners[refiner]}`;\r\n }\r\n if (refiner === virtualRefiners[1] && sortedRefiners[refiner]?.length === 1) {\r\n strNext = `${sortedRefiners[virtualRefiners[0]] ? `/ ${sortedRefiners[refiner]}` : `${sortedRefiners[refiner]}`}`;\r\n if (sortedRefiners[virtualRefiners[2]]?.length !== 1) {\r\n str = !sortedRefiners[virtualRefiners[0]] ? `${sortedRefiners[refiner]}` : `${str} / ${sortedRefiners[refiner]}`;\r\n }\r\n }\r\n if (refiner === virtualRefiners[2] && sortedRefiners[refiner]?.length === 1) {\r\n str =\r\n str || strNext\r\n ? `${str} ${sortedRefiners[virtualRefiners[1]] ? strNext : '/'} ${sortedRefiners[virtualRefiners[2]] ? `/ ${sortedRefiners[refiner]}` : str\r\n }`\r\n : `${sortedRefiners[refiner]}`;\r\n }\r\n return true;\r\n } else {\r\n breakAll = false;\r\n return false;\r\n }\r\n });\r\n return { part: str, realUrlParts };\r\n };\r\n\r\n private _getUrl = (originalUrlPart: string): string => {\r\n const { data, context } = this.props;\r\n const requestContext = context && context.request;\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n let slug = (data.category.result && data.category.result.Slug) || '/search';\r\n let slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n const params = MsDyn365.isBrowser && window.location;\r\n return `/${slug}/${originalUrlPart}${categoryId ? `/${categoryId}` : ''}${params && params.search ? params.search : ''}`;\r\n };\r\n private _trimSpacesAndCapitalize = (st: string): string => {\r\n return st\r\n .trimStart()\r\n .trimEnd()\r\n .replace(/(^\\w{1})|(\\s{1}\\w{1})/g, match => match.toUpperCase());\r\n };\r\n private _getCategoryHierarchy = (itemPosition: number): JSX.Element[] | null => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result && [...data.categoryHierarchy.result];\r\n if (!categoryHierarchy) {\r\n this.props.context.telemetry.error('Category Hierarchy content is empty, module wont render');\r\n return null;\r\n }\r\n const categoryHierarchyTemp: ICategory[] = [];\r\n categoryHierarchy.map(category => {\r\n const cat: ICategory = {\r\n Name: category.Name!,\r\n Url: category.Url!\r\n };\r\n categoryHierarchyTemp.push(cat);\r\n });\r\n this.state.concatRefinerCat.length &&\r\n this.state.concatRefinerCat.map((item: ICategory) => {\r\n categoryHierarchyTemp.push(item);\r\n });\r\n return categoryHierarchyTemp\r\n ? categoryHierarchyTemp.map((value: ICategory, index: number) => {\r\n itemPosition++;\r\n return (\r\n \r\n );\r\n })\r\n : null;\r\n };\r\n\r\n // This is used in _getCategoryHierarchy OOB to support translations. TODO: decide if we want to implement.\r\n\r\n // private readonly _getFriendlyName = (locale: string, nameTranslations?: TextValueTranslation[]): string | undefined => {\r\n // let nameTranslation: TextValueTranslation | undefined;\r\n // if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n // nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n // }\r\n\r\n // // If friendly name for current locale is null, should use default locale.\r\n // if (nameTranslation === undefined && ArrayExtensions.hasElements(nameTranslations)) {\r\n // nameTranslation = nameTranslations[0];\r\n // }\r\n\r\n // return nameTranslation?.Text;\r\n // };\r\n\r\n private _getPDPLinks = (itemPosition: number): JSX.Element[] | null => {\r\n const url = this.props.context.request.url.requestUrl.href;\r\n const {\r\n config: { hideProductName },\r\n data: {\r\n product: { result: product },\r\n productSpecificationData: { result: productSpecificationData },\r\n categoryPaths: { result: categoryHierarchy }\r\n\r\n },\r\n app: { config: { brandBackofficeAttributePdp } }\r\n } = this.props;\r\n const brandName = parseBrandName(productSpecificationData, brandBackofficeAttributePdp) || '';\r\n if (!categoryHierarchy) {\r\n this.props.context.telemetry.error('Category path content is empty for the product');\r\n return null;\r\n }\r\n const links: JSX.Element[] = [];\r\n\r\n categoryHierarchy.map((value: ICategoryUrl, index: number) => {\r\n itemPosition++;\r\n links.push(\r\n \r\n );\r\n });\r\n if (product && !hideProductName) {\r\n itemPosition++;\r\n links.push(\r\n \r\n );\r\n }\r\n return links;\r\n };\r\n\r\n private _goBack = (): void => {\r\n if (MsDyn365.isBrowser) {\r\n window.history.back();\r\n }\r\n };\r\n\r\n private _getPDPBackButton = (): JSX.Element | null => {\r\n const isBackAllowed =\r\n this.props.context && this.props.context.request && this.props.context.request.query && this.props.context.request.query.back;\r\n if (!isBackAllowed) {\r\n return null;\r\n }\r\n if (MsDyn365.isBrowser && (document.referrer === '' || window.history.length < 2)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {this.props.resources.backToResultsText}\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default Breadcrumb;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { HtmlHeadInclude } from '@msdyn365-commerce/core-internal';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { IBreadcrumbViewProps } from './mfrm-breadcrumb';\r\nimport CustomSkeleton from '../../themes/mattressfirm/custom-components/CustomSkeleton';\r\n\r\n// tslint:disable-next-line: cyclomatic-complexity\r\nconst MfrmBreadCrumbView: React.FC = props => {\r\n const { root, isLoadedRoot, links, backButton, BreadcrumbContainer, BreadcrumbList, BreadcrumbListItem, separator, plpBreadcrumbSchema, pdpBreadcrumbSchema } = props;\r\n // VSI Customization - start\r\n // Todo\r\n // To remove channel navigation hirarchy parent node i.e. All, which might be updated later on\r\n const levelToHide = 1;\r\n let showBreadCrumb: boolean = false;\r\n const pageType = props.data.listPageState?.result?.pageType;\r\n const searchQueryValue = props.context.request.query?.q;\r\n const mfrmLinks = links?.length && props.config.hideParentCatagory ? links?.splice(levelToHide, links.length) : links;\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n const activeProducts = props.data.listPageState?.result?.activeProducts;\r\n const extProperties = activeProducts && activeProducts.length > 0 && activeProducts[0]?.ExtensionProperties || [];\r\n const fallBackQueryResult = extProperties?.find(obj => obj?.Key === 'FallbackQuery')?.Value?.StringValue;\r\n const [isSchemaUpdated,setIsSchemaUpdated]=React.useState(false);\r\n const getHREF = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n const targetElm = event.target as Element;\r\n const parentHREF = targetElm?.closest('a')?.getAttribute('href'); // get clicked items parent href\r\n const redirectURL = parentHREF; // set redirect url after tagging even\r\n // @ts-ignore\r\n if (utag && redirectURL !== undefined) {\r\n event.preventDefault();\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'internal navigation',\r\n event_category: 'internal links',\r\n event_action: `to: ${redirectURL}`,\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n if (MsDyn365.isBrowser && redirectURL) {\r\n window.location.href = redirectURL;\r\n }\r\n }\r\n };\r\n if (pageType === 'Search' && props.data.updateBreadcrumbOnSrp.result?.breadcrumbCheck) {\r\n showBreadCrumb = true;\r\n } else if (pageType === 'Search' && !props.data.updateBreadcrumbOnSrp.result?.breadcrumbCheck) {\r\n showBreadCrumb = false;\r\n }\r\n // VSI Customization - ends\r\n if (!root && !links && !backButton) {\r\n props.context.telemetry.warning('BreadCrumb content is empty, module wont render');\r\n return null;\r\n }\r\n const _renderPlpBreadcrumbSchema =()=> {\r\n if (plpBreadcrumbSchema) {\r\n const inlineScripts = document.createElement('script');\r\n inlineScripts .setAttribute('type', 'application/ld+json');\r\n inlineScripts.text = plpBreadcrumbSchema;\r\n const head = document.head;\r\n head.insertBefore(inlineScripts, head.firstElementChild);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if(plpBreadcrumbSchema){\r\n setIsSchemaUpdated(true);\r\n }\r\n } ,[plpBreadcrumbSchema]);\r\n if(!isLoadedRoot){\r\n return ;\r\n } else {\r\n return (\r\n \r\n {isSchemaUpdated && (pageType ==='Category' || pageType ==='Search') && _renderPlpBreadcrumbSchema() }\r\n {props.context.request.urlTokens.pageType === 'Product' &&\r\n \r\n {/* tslint:disable:react-no-dangerous-html - intentionally setting inner html with only data action output (no unsanizted user input)*/}\r\n \r\n }\r\n \r\n {root && pageType !== 'Search' && (\r\n \r\n {root}\r\n {links && separator}\r\n \r\n )}\r\n {root && pageType === 'Search' && !showBreadCrumb && (\r\n \r\n {root}\r\n {separator}\r\n {props.resources.breadcrumbShowingResultQuery} {fallBackQueryResult !== '' ? ‘‘{fallBackQueryResult}’’ : ‘‘{searchQueryValue}’’}\r\n \r\n )}\r\n {backButton && {backButton}}\r\n {/* VSI Customization -start */}\r\n {mfrmLinks &&\r\n mfrmLinks.map((link, index) => (\r\n \r\n \r\n {link}\r\n {mfrmLinks[index + 1] && separator}\r\n \r\n \r\n ))}\r\n {/* VSI Customization - ends */}\r\n \r\n \r\n );\r\n }\r\n};\r\n\r\nexport default MfrmBreadCrumbView;\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 { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n IActionInput,\r\n IAny,\r\n getCatalogId,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n/* tslint:disable: no-duplicate-imports */\r\nimport { convertToString, IQueryResultSettings, ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { toJS } from 'mobx';\r\nimport { hydrateRefinersFromUrl } from './url-utils';\r\n\r\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\r\n\r\n/**\r\n * Get include attributes from config.\r\n */\r\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\r\n if (inputData &&\r\n inputData.config &&\r\n inputData.config.includeAttributes !== undefined &&\r\n inputData.config.includeAttributes === true) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Get updateRefinerPanel from config.\r\n * @param inputData - ICreateActionContext.\r\n * @returns Boolean.\r\n */\r\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\r\n return !!inputData.config?.updateRefinerPanel;\r\n}\r\n/**\r\n * BaseCollection Action Input\r\n */\r\nexport class BaseCollectionInput implements IActionInput {\r\n public pageType: listPageType;\r\n public category: number | undefined;\r\n public searchText: string | undefined;\r\n public refiners: ProductRefinerValue[];\r\n public queryResultSettings: IQueryResultSettings;\r\n public apiSettings: ICommerceApiSettings;\r\n public includeAttributes: boolean | undefined;\r\n public locale?: string;\r\n // VSI Customization 7924 Start\r\n public urlPathName?: string;\r\n // VSI Customization 7924 End\r\n public isSizeRefinerAndCategory?: boolean | undefined;\r\n public isUpdateRefinerPanel?: boolean | undefined;\r\n public catalogId?: number | undefined;\r\n constructor(\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n locale?: string,\r\n // VSI Customization 7924 Start\r\n urlPathName?: string,\r\n // VSI Customization 7924 End\r\n isSizeRefinerAndCategory?: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n catalogId?: number | undefined\r\n ) {\r\n this.pageType = pageType;\r\n this.apiSettings = apiSettings;\r\n this.category = category;\r\n this.searchText = searchText;\r\n this.queryResultSettings = queryResultSettings;\r\n this.refiners = refiners;\r\n this.includeAttributes = includeAttributes;\r\n this.locale = locale;\r\n // VSI Customization 7924 Start\r\n this.urlPathName = urlPathName;\r\n // VSI Customization 7924 End\r\n this.isSizeRefinerAndCategory = isSizeRefinerAndCategory;\r\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\r\n this.catalogId = catalogId ?? 0;\r\n if (this.refiners && this.refiners.length > 0) {\r\n this.refiners[0].ExtensionProperties = [\r\n {\r\n Key: 'ISREQUESTOVERRIDE',\r\n Value: {\r\n BooleanValue: (!isSizeRefinerAndCategory || isSizeRefinerAndCategory === undefined ? false : true),\r\n ByteValue: undefined,\r\n DateTimeOffsetValue: undefined,\r\n DecimalValue: undefined,\r\n IntegerValue: undefined,\r\n LongValue: undefined,\r\n StringValue: undefined\r\n }\r\n }\r\n ];\r\n }\r\n }\r\n public getCacheKey = () => {\r\n const queryResultSettings = {\r\n ...this.queryResultSettings.Paging,\r\n ...toJS(this.queryResultSettings.Sorting)\r\n };\r\n\r\n return buildCacheKey(\r\n `${this.pageType}-${this.locale}-${this.category || this.searchText}-${this.refiners.map(refiner => `${refiner.RefinerRecordId}${refiner.LeftValueBoundString || ''}${refiner.RightValueBoundString || ''}-`)}-${convertToString(queryResultSettings)}-${this.urlPathName}`,\r\n this.apiSettings, this.locale\r\n );\r\n };\r\n\r\n public getCacheObjectType = () => 'CollectionActionResult';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IGetFullProductsByCollectionData {\r\n text: string;\r\n}\r\n\r\nexport type CollectionClassConstructor = new (\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n locale?: string,\r\n // VSI Customization 7924 Start\r\n urlPathName?: string,\r\n // VSI Customization 7924 End\r\n isSizeRefinerAndCategory?: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n catalogId?: number | undefined,\r\n\r\n) => BaseCollectionInput;\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nexport const createBaseCollectionInput = (\r\n args: ICreateActionContext,\r\n inputClassConstuctor: CollectionClassConstructor\r\n): BaseCollectionInput => {\r\n const pageType =\r\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\r\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\r\n const includeAttributes = getIncludeAttributes(args);\r\n // VSI Customization 7924 Start\r\n const pathName = args.requestContext.url.requestUrl.pathname;\r\n // VSI Customization 7924 End\r\n\r\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\r\n const catalogId = getCatalogId(args.requestContext);\r\n\r\n if (args.requestContext.query && args.requestContext.query.sorting) {\r\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\r\n }\r\n\r\n if (pageType === 'Category') {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\r\n undefined,\r\n includeAttributes,\r\n args.requestContext.locale,\r\n pathName, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n args.requestContext.query.q,\r\n includeAttributes,\r\n args.requestContext.locale, undefined, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.productId) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n args.requestContext.query.productId,\r\n includeAttributes,\r\n args.requestContext.locale, undefined, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n }\r\n\r\n throw new Error('[getFullProductsForCollection]Unable to create input');\r\n};","/* tslint:disable: no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Uses Bulk refiner API to get refiners and child refiner values\r\n * @param searchCriteria product search criteria\r\n * @param maxItems max items\r\n * @param ctx action context\r\n */\r\nexport async function getProductRefinerHierarchy(searchCriteria: ProductSearchCriteria, queryResultSettings: IQueryResultSettings, ctx: IActionContext): Promise {\r\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings: queryResultSettings }, searchCriteria).then((productRefiners: ProductRefiner[]) => {\r\n if (!productRefiners) {\r\n ctx.trace('[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) {\r\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\r\n return [];\r\n }\r\n\r\n return result;\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/* tslint:disable: no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\r\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\r\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\r\n\r\n/**\r\n * Refiners-by-Collection Input action\r\n */\r\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\r\n public getCacheObjectType = () => 'ProductRefiner';\r\n public dataCacheType = () => {\r\n if (\r\n this.pageType !== 'Category' ||\r\n (this.refiners && this.refiners.length > 0) ||\r\n (this.queryResultSettings && this.queryResultSettings.Sorting && this.queryResultSettings.Sorting.Columns && this.queryResultSettings.Sorting.Columns.length > 0)\r\n ) {\r\n return 'request';\r\n } else {\r\n return 'application';\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create input method which creates an ActionInput for fetching list page refiners\r\n */\r\nconst createInput = (args: ICreateActionContext): IActionInput => {\r\n return createBaseCollectionInput(args, RefinersByCollectionInput);\r\n};\r\n\r\n/**\r\n * Action method which fetches refiners for the given list page\r\n */\r\nasync function action(input: RefinersByCollectionInput, ctx: IActionContext): Promise {\r\n let searchProductId;\r\n if (input.pageType === 'Category') {\r\n if (input.category) {\r\n return getProductRefinerHierarchy(\r\n {\r\n CategoryIds: [input.category],\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n }\r\n },\r\n input.queryResultSettings,\r\n ctx);\r\n } else {\r\n throw new Error('[GetRefinersForCollection]Category Page Detected, but no global categoryId found');\r\n }\r\n } else {\r\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.q)) {\r\n return getProductRefinerHierarchy(\r\n {\r\n SearchCondition: input.searchText,\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n }\r\n },\r\n input.queryResultSettings,\r\n ctx);\r\n } else {\r\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.productId)) {\r\n searchProductId = Number(input.searchText);\r\n if (Number.isNaN(searchProductId)) {\r\n throw new Error('Failed to cast search product id into a number.');\r\n } else {\r\n return getProductRefinerHierarchy(\r\n {\r\n Context: {\r\n ChannelId: input.apiSettings.channelId,\r\n CatalogId: input.apiSettings.catalogId\r\n },\r\n RecommendationListId: 'looks',\r\n Ids: [searchProductId || 0]\r\n },\r\n input.queryResultSettings,\r\n ctx);\r\n }\r\n } else {\r\n throw new Error(\r\n '[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found'\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\r\n action: >action,\r\n input: createInput\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 MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Refiner Compression:\r\n * Refiners contains a non-trivial amount of data that is required to successfully make\r\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\r\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\r\n * the following array style index-based format:\r\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText]\r\n */\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Hydrates compressed refiner data from URL\r\n * @param fullUrl The full URL of the page\r\n */\r\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\r\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\r\n if (!compressedRefinerArray || !compressedRefinerArray.length) {\r\n return [];\r\n }\r\n\r\n return compressedRefinerArray.map((compressedRefiner) => {\r\n try {\r\n const parsedRefiner: ProductRefinerValue = {};\r\n compressedRefinerKeys.forEach((refinerKey, index) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n parsedRefiner[refinerKey] = compressedRefiner[index];\r\n });\r\n return parsedRefiner;\r\n } catch(e) {\r\n return undefined;\r\n }\r\n }).filter(Boolean);\r\n};\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n\r\n/**\r\n * Method which creates a URL contiaining serialized active refiners\r\n * @param fullUrl The Current URL of the page\r\n * @param refiners The refiners which should be added to the URL\r\n */\r\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\r\n // Refiner Change flow\r\n if (refiners !== undefined) {\r\n if (!refiners.length) {\r\n fullUrl.searchParams.delete('refiners');\r\n } else {\r\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(refiners)));\r\n }\r\n\r\n // Adding or removing a refiner means we want to always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (sortingColumns !== undefined) {\r\n if(!sortingColumns.length) {\r\n fullUrl.searchParams.delete('sorting');\r\n } else {\r\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\r\n }\r\n\r\n // Changing the sort means always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (skipCount) {\r\n fullUrl.searchParams.set('skip', skipCount.toString());\r\n }\r\n\r\n return fullUrl.href;\r\n};\r\n\r\n/**\r\n * Parses a query param from the query object of the request context\r\n * @param key The query parameter key\r\n * @param requestContext The request context\r\n */\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\r\n if(requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Gets the current URL of the page from the request context\r\n * @param requestContext The request context\r\n */\r\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\r\n if(MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n } else {\r\n // NOTE: Typing on requestURL is incorrect\r\n if (requestContext.url.requestUrl.href) {\r\n return new URL(requestContext.url.requestUrl.href);\r\n } else {\r\n return new URL((requestContext.url.requestUrl));\r\n }\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\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 { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { observable } from 'mobx';\r\n\r\nimport { listPageType } from './actions';\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 activeVirtualFilters: ProductRefinerValue[] | null = null;\r\n @observable public activeProducts: ProductSearchResult[] = [];\r\n @observable public sortingCritera: SortingInfo | null = null;\r\n @observable public currentPageNumber: number | null = null;\r\n @observable public totalProductCount: number | undefined;\r\n @observable public pageSize: number = 10;\r\n @observable public pageType: listPageType = 'Unknown';\r\n @observable public featureProduct: SimpleProduct | null = null;\r\n @observable public productPrices: ProductPrice[] | undefined = [];\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","import React, { FunctionComponent } from 'react';\r\n\r\n\r\ninterface Props {\r\n /** Sets the skeleton-pulse style */\r\n type?: 'text' | 'image' | 'button' | 'button-secondary';\r\n /** Sets the width of the skeleton. Default unit is px. */\r\n width?: number | string;\r\n /** Sets the height of the skeleton. Default unit is px. */\r\n height?: number | string;\r\n /** Makes the skeleton look like a circle */\r\n circle?: boolean;\r\n /** Override classNames on wrapper */\r\n className?: string;\r\n /** Override styles on wrapper */\r\n style?: object;\r\n [rest: string]: unknown; // ...rest property\r\n}\r\n\r\nconst getValidCSSInput = (input: string | number) => {\r\n switch (typeof input) {\r\n case 'undefined':\r\n case 'boolean':\r\n return null;\r\n case 'number':\r\n return `${input}px`;\r\n default:\r\n const parsedInput = parseFloat(input);\r\n const unit = input.match(/%|em/);\r\n return isNaN(parsedInput) ? '' : unit ? `${parsedInput}${unit}` : `${parsedInput}px`;\r\n }\r\n};\r\n\r\nconst CustomSkeleton: FunctionComponent = ({\r\n width,\r\n height,\r\n circle,\r\n type = 'text',\r\n className = '',\r\n style = {},\r\n ...rest\r\n}) => {\r\n const isTextType = type === 'text';\r\n const classNames = `pulse ${!className ? type : ``} ${isTextType ? 'transform' : ''} ${type === 'button-secondary' && !className ? 'button' : ''} ${circle ? 'circle' : ''} ${className}`;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CustomSkeleton;\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-breadcrumb'] = {\n c: () => require('partner/modules/mfrm-breadcrumb/mfrm-breadcrumb.tsx'),\n $type: 'contentModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'categoryPaths', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths', runOn: 0},{name:'listPageState', path:'modules/mfrm-search-result-container/list-page-state', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'data-actions/get-attributes-for-selected-variant', runOn: 0},{name:'refiners', path:'modules/mfrm-search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'updateBreadcrumbOnSrp', path:'actions/srp-breadcrumb-page.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-breadcrumb',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-breadcrumb'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/srp-breadcrumb-page.action';\n let dataAction = require('partner/actions/srp-breadcrumb-page.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/get-attributes-for-selected-variant';\n let dataAction = require('partner/data-actions/get-attributes-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/mfrm-search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/list-page-state';\n let dataAction = require('partner/modules/mfrm-search-result-container/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|mfrm-breadcrumb|mfrm-breadcrumb'] = {\n c: () => require('partner/modules/mfrm-breadcrumb/mfrm-breadcrumb.view.tsx'),\n cn: '__local__-__local__-mfrm-breadcrumb'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["hasArray","values","length","undefined","fallBackBrandAttribute","parseBrandName","attributes","backendAttribute","recordId","attribute","productBrandName","find","currAttribute","Name","toLowerCase","trim","TextValue","MsDyn365","getLocalStorage","localStorage","getItem","bonusItemArray","JSON","parse","checkBrandName","item","productId","brandName","parseBrandNameUnbxd","getBrandNameCheck","canonicalURL","requestContext","requestUrl","url","origin","path","pathname","urlParts","split","splice","match","removePipeSignValue","removeKeywords","filteredPath","join","filteredURL","filter","urlPart","indexOf","removeKeywordFromUrl","app","config","removeKeywordFromUrlArray","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","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","SrpBreadcrumbPageInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","Msdyn365","action","input","ctx","breadcrumbCheck","id","args","AttributesForSelectedVariantInput","channelId","selectedProduct","catalogId","this","createAttributesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","apiSettings","Error","getAttributesForSelectedVariantAction","Promise","resolve","then","activeProduct","selectedVariantInput","SelectedVariantInput","getSelectedVariant","productResult","getAttributeValuesAsync","callerContext","queryResultSettings","RecordId","attributeValues","catch","error","trace","message","createObservableDataAction","Link","text","className","href","ariaLabel","index","noclick","telemetryContent","payLoad","getPayloadObject","linkText","contentAction","etext","getTelemetryAttributes","React","onClick","onTelemetryClick","itemProp","content","Separator","separator","Breadcrumb","props","super","_pageType","context","request","pageType","getTelemetryObject","telemetryPageName","friendlyName","telemetry","_getRootLink","root","linkUrl","destinationUrl","setState","isLoadedRoot","modifyBreadcrumbUrl","pop","_getCustomBreadcrumbLinks","itemPosition","links","value","key","toString","_makeRealUrlParts","decodedArr","refinerParts","realUrl","realUrlParts","includes","_getUrlString","data","categoryId","slug","category","result","Slug","slugArray","params","window","location","refinersString","configVirtualRefinerNames","filteredRefiners","refiners","refiner","KeyName","sortedValues","refinerSet","refinerPart","str","strNext","breakAll","every","sortedRefiners","_getUrl","originalUrlPart","search","_trimSpacesAndCapitalize","st","trimStart","trimEnd","toUpperCase","_getCategoryHierarchy","categoryHierarchy","categoryHierarchyTemp","cat","Url","state","concatRefinerCat","_getPDPLinks","hideProductName","product","productSpecificationData","categoryPaths","brandBackofficeAttributePdp","_goBack","history","back","_getPDPBackButton","query","document","referrer","role","resources","backToResultsText","plpBreadcrumbSchema","componentDidMount","refinerCat","componentDidUpdate","schema","_makePlpBreadcrumbSchema","render","rootLink","breadcrumbLinks","backButtonComponent","breaCrumbType","breadcrumbType","linkSeparator","breadcrumbViewProps","BreadcrumbContainer","moduleProps","classnames","tag","BreadcrumbList","BreadcrumbListItem","backButton","pdpBreadcrumbSchema","_makePdpBreadcrumbSchema","renderView","homeUrl","plpLinks","position","breadcrumbData","plpLink","breadcrumbUrl","concat","modifiedBreadcrumbUrl","itemListElement","searchQueryValue","q","stringify","pdpLinks","pdpLink","pdpBreadcrumbUrl","breadcrumbLink","showBreadCrumb","listPageState","mfrmLinks","hideParentCatagory","pageURL","activeProducts","extProperties","ExtensionProperties","fallBackQueryResult","obj","Key","Value","StringValue","isSchemaUpdated","setIsSchemaUpdated","getHREF","event","preventDefault","targetElm","target","redirectURL","closest","getAttribute","utag","event_category","event_action","event_label","event_noninteraction","updateBreadcrumbOnSrp","warning","Module","Object","inlineScripts","createElement","setAttribute","head","insertBefore","firstElementChild","_renderPlpBreadcrumbSchema","HtmlHeadInclude","type","dangerouslySetInnerHTML","__html","Node","breadcrumbShowingResultQuery","CustomSkeleton","height","style","marginBottom","BaseCollectionInput","searchText","includeAttributes","locale","urlPathName","isSizeRefinerAndCategory","isUpdateRefinerPanel","Paging","toJS","Sorting","buildCacheKey","RefinerRecordId","RightValueBoundString","convertToString","BooleanValue","ByteValue","DateTimeOffsetValue","DecimalValue","IntegerValue","LongValue","createBaseCollectionInput","inputClassConstuctor","QueryResultSettingsProxy","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","pathName","updateRefinerPanel","getUpdateRefinerPanel","getCatalogId","sorting","Columns","itemId","getProductRefinerHierarchy","searchCriteria","getProductSearchRefinersAsync","productRefiners","productRefiner","RefinersByCollectionInput","searchProductId","CategoryIds","Context","ChannelId","CatalogId","SearchCondition","Number","isNaN","RecommendationListId","Ids","compressedRefinerKeys","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","refinerKey","e","Boolean","buildListPageUrl","fullUrl","sortingColumns","skipCount","searchParams","set","compressedRefiners","compressRefiners","delete","getCurrentUrl","URL","ListPageState","activeFilters","activeVirtualFilters","sortingCritera","currentPageNumber","pageSize","featureProduct","productPrices","__decorate","observable","ListPageStateInput","listPageStateAction","createListPageInput","getValidCSSInput","parsedInput","parseFloat","unit","width","circle","rest","isTextType","classNames","borderRadius","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}