{"version":3,"file":"static/js/9447cf71b1f2e7ac6966.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/analytics/clickTrack.ts?bce2","webpack://mattressfirm/./src/Utilities/components/BVRatingSummary.tsx?6e2e","webpack://mattressfirm/./src/Utilities/get-product-badge.tsx?635b","webpack://mattressfirm/./src/Utilities/get-product-brand.tsx?2b65","webpack://mattressfirm/./src/Utilities/select-financing-offer.tsx?5f53","webpack://mattressfirm/./src/data-actions/financing-offer-state.action.ts?9faa","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/financing-per-month-component.tsx?fa70"],"sourcesContent":["import { callUtagLink } from \"./utagCaller\";\r\n\r\nexport interface IUtagPromoConfig {\r\n promotion_impression_name?: string[];\r\n promotion_impression_id?: string[];\r\n promotion_impression_creative?: string[];\r\n promotion_impression_position?: (string | undefined)[];\r\n promotion_name?: string[];\r\n promotion_id?: string[];\r\n promotion_creative?: string[];\r\n promotion_position?: (string | undefined)[];\r\n}\r\n\r\nexport interface IUtagGeneralConfig {\r\n enhanced_action?: string | undefined;\r\n}\r\nexport interface ICustomerConfig {\r\n customer_email?: string;\r\n}\r\nexport interface IProductConfig {\r\n product_id?: string[];\r\n product_name?: string[];\r\n product_category?: (string | undefined)[];\r\n product_brand?: (string | undefined)[];\r\n product_variant?: (string | undefined)[];\r\n product_price?: (string | undefined)[];\r\n product_list_name?: string[];\r\n product_position?: (number | undefined)[];\r\n product_quantity?: (string | undefined)[];\r\n checkout_step?: string;\r\n}\r\nexport interface IProductImpressionConfig {\r\n product_impression_brand?: (string | undefined)[];\r\n product_impression_list_name?: (string | undefined)[];\r\n product_impression_id?: string[];\r\n product_impression_name?: string[];\r\n product_impression_category?: string[];\r\n product_impression_variant?: (string | undefined)[];\r\n product_impression_position?: number[];\r\n product_impression_price?: number[];\r\n}\r\nexport interface IAnalyticsConfiguration {\r\n event?: string | null;\r\n eventName?: string | null;\r\n eventCategory?: string | null;\r\n eventAction?: string | null;\r\n eventLabel?: string | null;\r\n eventType?: string | null;\r\n eventNoninteraction?: string;\r\n enhancedAction?: string | null;\r\n searchTerm?: string | undefined | null;\r\n searchType?: string | undefined | null;\r\n generalConfig?: IUtagGeneralConfig;\r\n promoConfig?: IUtagPromoConfig;\r\n productConfig?: IProductConfig;\r\n customerConfig?: ICustomerConfig;\r\n productImpressionConfig?: IProductImpressionConfig;\r\n}\r\n\r\nexport const fireAnalyticsLink = ({\r\n searchTerm = null,\r\n searchType = null,\r\n eventName = null,\r\n eventCategory = null,\r\n eventAction = null,\r\n eventLabel = null,\r\n eventType = null,\r\n eventNoninteraction = 'false',\r\n enhancedAction = null,\r\n generalConfig = {},\r\n promoConfig = {},\r\n productConfig = {},\r\n customerConfig = {},\r\n productImpressionConfig = {}\r\n}: IAnalyticsConfiguration) => {\r\n void callUtagLink({\r\n ...generalConfig,\r\n ...promoConfig,\r\n ...productConfig,\r\n ...customerConfig,\r\n ...productImpressionConfig,\r\n event: eventName,\r\n event_category: eventCategory,\r\n event_action: eventAction,\r\n event_label: eventLabel,\r\n event_type: eventType,\r\n event_noninteraction: eventNoninteraction,\r\n enhanced_action: enhancedAction,\r\n search_term: searchTerm,\r\n search_type: searchType\r\n });\r\n};","import React, { useState, useEffect, useRef } from 'react';\r\n\r\nexport const BVRatingSummary = ({\r\n itemId,\r\n onClick,\r\n variantId,\r\n hideReadReviewsButton\r\n}: {\r\n itemId: string | undefined;\r\n onClick?: () => void;\r\n variantId?: number | undefined;\r\n hideReadReviewsButton?: boolean\r\n}) => {\r\n const [dataBvProductIdAttr, setDataBvProductIdAttr] = useState(itemId);\r\n const wrapper = useRef(null);\r\n const interval = useRef(-1);\r\n const numReviews = wrapper.current?.querySelector('.bv_numReviews_text')?.innerHTML.match(/\\(([^)]+)\\)/)?.[1];\r\n\r\n useEffect(() => {\r\n setDataBvProductIdAttr(itemId);\r\n }, [itemId]);\r\n\r\n useEffect(() => {\r\n setDataBvProductIdAttr('bv-refresh');\r\n }, [variantId]);\r\n\r\n useEffect(() => {\r\n if (dataBvProductIdAttr === 'bv-refresh') {\r\n setDataBvProductIdAttr(itemId);\r\n }\r\n }, [dataBvProductIdAttr]);\r\n\r\n useEffect(() => {\r\n if (wrapper.current) {\r\n numReviews === '0' ? wrapper.current.style.display = 'none' : wrapper.current.style.display = 'flex';\r\n }\r\n }, [numReviews]);\r\n\r\n return (\r\n {\r\n if (hideReadReviewsButton) {\r\n interval.current = window.setInterval(() => {\r\n const button: Element | undefined = Array.from(document.querySelectorAll('.bv_button_buttonFull')).find((button) => {\r\n return button?.innerHTML === `Read ${numReviews} Reviews`;\r\n });\r\n if (button) {\r\n button.outerHTML = '';\r\n }\r\n });\r\n }\r\n }}\r\n onMouseLeave={() => {\r\n if (hideReadReviewsButton) {\r\n clearInterval(interval.current);\r\n }\r\n }}\r\n data-bv-show='rating_summary'\r\n data-bv-product-id={dataBvProductIdAttr}\r\n onClick={onClick}\r\n ref={wrapper}\r\n />\r\n );\r\n};\r\n","import { IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport tz from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\ndayjs.extend(tz);\r\ndayjs.extend(utc);\r\ndayjs.extend(isBetween);\r\nimport React from 'react';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nconst format = 'M/D/YYYY H:m:s';\r\n\r\nexport interface IBadgeData {\r\n src: string;\r\n alt: string;\r\n start: dayjs.Dayjs;\r\n end: dayjs.Dayjs;\r\n}\r\n\r\nconst defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `m=6`, w: 0, h: 0 }\r\n },\r\n disableLazyLoad: true\r\n};\r\n\r\nexport const parseBadgeData = (badgeData: string, requestContext: IRequestContext): IBadgeData | undefined => {\r\n let dataSegments;\r\n let scheduleStart;\r\n let scheduleEnd;\r\n let badgeType;\r\n let parsedScheduleStart;\r\n let startDate;\r\n let startTime;\r\n let parsedScheduleEnd;\r\n let endDate;\r\n let endTime;\r\n\r\n try {\r\n // split the data into its segments\r\n dataSegments = badgeData.split('#');\r\n scheduleStart = dataSegments[0];\r\n scheduleEnd = dataSegments[1];\r\n badgeType = dataSegments[2];\r\n\r\n // parse schedule start\r\n parsedScheduleStart = scheduleStart.split('_');\r\n startDate = parsedScheduleStart[0];\r\n startTime = parsedScheduleStart[1];\r\n\r\n // parse schedule end\r\n parsedScheduleEnd = scheduleEnd.split('_');\r\n endDate = parsedScheduleEnd[0];\r\n endTime = parsedScheduleEnd[1];\r\n } catch (e) {\r\n return;\r\n }\r\n\r\n const startMoment = `${startDate} ${startTime.replace(/-/g, \":\")}`;\r\n const endMoment = `${endDate} ${endTime.replace(/-/g, \":\")}`;\r\n\r\n const startMomentFormatted = dayjs(startMoment.replace(/-/g, \"/\"));\r\n const endMomentFormatted = dayjs(endMoment.replace(/-/g, \"/\"));\r\n\r\n // check if schedule is valid\r\n if (!(startMomentFormatted.isValid() && endMomentFormatted.isValid())) {\r\n return;\r\n }\r\n\r\n // parse badge type and create image src\r\n const baseUrl = requestContext.apiSettings.baseImageUrl.substring(0, requestContext.apiSettings.baseImageUrl.length - 1);\r\n if (badgeType) {\r\n const removed$ = badgeType.substring(1, badgeType.length - 1);\r\n const parsedBadgeType = removed$.replace(' ', '-').toLowerCase();\r\n\r\n // remove page name portion\r\n const altText = removed$.split('-')[0];\r\n\r\n const src = `${baseUrl}${parsedBadgeType}.png`;\r\n return {\r\n src: src,\r\n alt: altText,\r\n start: convertTimeZone(startMomentFormatted),\r\n end: convertTimeZone(endMomentFormatted)\r\n };\r\n } else {\r\n return;\r\n }\r\n};\r\n\r\n// convert given time to Central Time (CT)\r\nconst convertTimeZone = (time: dayjs.Dayjs): dayjs.Dayjs => {\r\n return dayjs(time.format(format), format).tz('America/Chicago').local();\r\n};\r\n\r\nexport const buildProductBadge = (parsedBadgeData: IBadgeData, requestContext: IRequestContext): JSX.Element | undefined => {\r\n // only build image if it is scheduled\r\n const isScheduled = dayjs().isBetween(parsedBadgeData.start, parsedBadgeData.end);\r\n\r\n if (isScheduled) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const renderProductBadge = (\r\n attributeName: string | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined => {\r\n const badgeData = attributeName;\r\n if (!badgeData) {\r\n return;\r\n }\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n\r\n // build product badge image components\r\n const finalizedBadges = parsedBadges.map(parsedBadge => parsedBadge && buildProductBadge(parsedBadge, requestContext));\r\n\r\n return finalizedBadges ? <>{finalizedBadges} : <>;\r\n};\r\n\r\nexport const renderProductBadgeByFilteringAttributes = (\r\n attributeName: string | undefined,\r\n attributes: AttributeValue[] | undefined,\r\n requestContext: IRequestContext\r\n): JSX.Element | undefined => {\r\n const badgeData =\r\n attributeName &&\r\n attributes?.find(\r\n currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === attributeName.toLowerCase().trim()\r\n )?.TextValue;\r\n if (!badgeData) {\r\n return;\r\n }\r\n\r\n // split badge data into its separate badges\r\n const badges = badgeData.split(',');\r\n\r\n // parse badge data to get its schedule and image src\r\n const parsedBadges = badges.map(badge => parseBadgeData(badge, requestContext));\r\n // build product badge image components\r\n const finalizedBadges = parsedBadges.map(parsedBadge => parsedBadge && buildProductBadge(parsedBadge, requestContext));\r\n\r\n return finalizedBadges && <>{finalizedBadges};\r\n};\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 { RichText } from '@msdyn365-commerce/core';\r\n\r\nimport dayjs from 'dayjs';\r\nimport tz from 'dayjs/plugin/timezone';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport isBetween from 'dayjs/plugin/isBetween';\r\ndayjs.extend(tz);\r\ndayjs.extend(utc);\r\ndayjs.extend(isBetween);\r\nconst format = 'M/D/YYYY';\r\n\r\nexport interface IFinancingOffer {\r\n offerName?: string;\r\n noInterestFor: number;\r\n minPurchase: number;\r\n everydayFinancingOfferMessage: string,\r\n limitedFinancingOfferMessage: string,\r\n lowCostFinancingOfferMessage:string,\r\n monthlyOfferDetails?: RichText;\r\n financingOfferDescription: RichText;\r\n disclaimer: RichText;\r\n offerValidStartDate?: string;\r\n offerValidEndDate?: string;\r\n specialCampaignOffer?: IFinancingOfferCampaign;\r\n checkoutDisplay?: { heading: string; details: string }\r\n}\r\nexport interface ILowCostOffer {\r\n offerName?: string;\r\n maxPurchase: number;\r\n lowCostFinancingOfferMessage: string,\r\n financingOfferDescription: RichText;\r\n disclaimer: RichText;\r\n}\r\n\r\n\r\nexport interface IFinancingOfferFormatted {\r\n numOfMonths: number;\r\n costPerMonth: number;\r\n startDate?: string;\r\n endDate?: string;\r\n isLTO: boolean;\r\n monthlyOfferDetails?: RichText;\r\n minPurchase: number;\r\n lowCostFinancingOfferMessage?:string;\r\n everydayFinancingOfferMessage: string;\r\n limitedFinancingOfferMessage: string;\r\n financingOfferDescription: RichText;\r\n disclaimer: RichText;\r\n specialCampaign?: IFinancingOfferCampaign;\r\n offerName?: string;\r\n checkoutDisplay?: { heading: string; details: string }\r\n}\r\n\r\nexport interface IFinancingOfferCampaign {\r\n initialMonthlyAmount: number;\r\n numOfDiscountedMonths: number;\r\n campaignValidStartDate: string;\r\n campaignValidEndDate: string;\r\n enableCampaign: boolean;\r\n showEverydayFlag: boolean;\r\n}\r\n\r\nexport interface ISelectFinancingOfferData {\r\n limitedTimeFinancingOffers: IFinancingOffer[];\r\n everydayFinancingOffers: IFinancingOffer[];\r\n lowCostOffer?: ILowCostOffer[]\r\n totalPrice: number | undefined;\r\n specialFinancingOffer?: IFinancingOffer[];\r\n synchronySpecialFinancingCondition?: boolean;\r\n specialFinancingEnable?: boolean;\r\n}\r\n\r\nexport interface ICampaignRemainingCost {\r\n cost: number;\r\n months: number;\r\n}\r\n\r\nexport const getValidSpecialCampaign = (financingOffer: IFinancingOfferFormatted): IFinancingOfferCampaign | undefined => {\r\n if (\r\n financingOffer.specialCampaign &&\r\n financingOffer.specialCampaign.enableCampaign &&\r\n financingOffer.specialCampaign.initialMonthlyAmount &&\r\n financingOffer.specialCampaign.numOfDiscountedMonths &&\r\n isCampaignScheduled(financingOffer)\r\n ) {\r\n return financingOffer.specialCampaign;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const getCampaignRemainingCost = (\r\n campaign: IFinancingOfferCampaign,\r\n financingOffer: IFinancingOfferFormatted,\r\n totalPrice: number | undefined\r\n): ICampaignRemainingCost | undefined => {\r\n if (!totalPrice) {\r\n return undefined;\r\n }\r\n\r\n const initialCost = campaign.initialMonthlyAmount * campaign.numOfDiscountedMonths;\r\n const remainingCost = totalPrice - initialCost;\r\n const remainingMonths = financingOffer.numOfMonths - campaign.numOfDiscountedMonths;\r\n const monthlyCost = remainingCost / remainingMonths;\r\n\r\n return {\r\n cost: monthlyCost,\r\n months: remainingMonths\r\n };\r\n};\r\nexport const isValidLimitedTimeOffer = (offer: IFinancingOffer): boolean => {\r\n const startDate = dayjs(offer.offerValidStartDate, format);\r\n const endDate = dayjs(offer.offerValidEndDate, format).add(1, 'd');\r\n\r\n const startDateCentralTime = startDate.isValid() && dayjs(startDate.format(format), format).tz('America/Chicago').local();\r\n const endDateCentralTime = endDate.isValid() && dayjs(endDate.format(format), format).tz('America/Chicago').local();\r\n\r\n const now = dayjs();\r\n return startDateCentralTime && endDateCentralTime && now.isBetween(startDateCentralTime, endDateCentralTime);\r\n};\r\n\r\nexport const isCampaignScheduled = (offer: IFinancingOfferFormatted): boolean => {\r\n const tempOffer = Object.create(offer);\r\n if (tempOffer.specialCampaign?.campaignValidStartDate && tempOffer.specialCampaign?.campaignValidEndDate) {\r\n tempOffer.startDate = tempOffer.specialCampaign?.campaignValidStartDate;\r\n tempOffer.endDate = tempOffer.specialCampaign?.campaignValidEndDate;\r\n\r\n return isScheduled(tempOffer);\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const isScheduled = (offer: IFinancingOfferFormatted): boolean => {\r\n const startDate = dayjs(offer.startDate, format);\r\n const endDate = dayjs(offer.endDate, format).add(1, 'd');\r\n\r\n const startDateCentralTime = startDate.isValid() && dayjs(startDate.format(format), format).tz('America/Chicago').local();\r\n const endDateCentralTime = endDate.isValid() && dayjs(endDate.format(format), format).tz('America/Chicago').local();\r\n\r\n const now = dayjs();\r\n\r\n return startDateCentralTime && endDateCentralTime && now.isBetween(startDateCentralTime, endDateCentralTime);\r\n};\r\n\r\nexport const selectFinancingOffer = ({ limitedTimeFinancingOffers = [], everydayFinancingOffers = [], lowCostOffer = [], totalPrice = 0, specialFinancingOffer = [], synchronySpecialFinancingCondition = false, specialFinancingEnable = false }: ISelectFinancingOfferData, returnCustomOfferArray?: boolean): IFinancingOfferFormatted | undefined => {\r\n let highestMinimumPurchase: number = 0;\r\n let bestOffer: IFinancingOfferFormatted = {\r\n numOfMonths: 0,\r\n costPerMonth: 0,\r\n isLTO: false,\r\n minPurchase: 0,\r\n everydayFinancingOfferMessage: '',\r\n limitedFinancingOfferMessage: '',\r\n monthlyOfferDetails: '',\r\n financingOfferDescription: '',\r\n disclaimer: ''\r\n };\r\n let offerFound = false;\r\n\r\n let campaignFound: IFinancingOfferFormatted | undefined;\r\n\r\n const everydayOffers: IFinancingOfferFormatted[] | undefined = [];\r\n const specialOffer: IFinancingOfferFormatted[] | undefined = [];\r\n\r\n const validLimitedTimeFinancingOffers = limitedTimeFinancingOffers.filter((offer) => {\r\n return isValidLimitedTimeOffer(offer) && offer;\r\n });\r\n\r\n if (synchronySpecialFinancingCondition && specialFinancingEnable) {\r\n if (!offerFound || (!isScheduled(bestOffer) && specialFinancingOffer.length)) {\r\n // try default offer\r\n offerFound = false;\r\n highestMinimumPurchase = 0;\r\n specialFinancingOffer.forEach((offer: IFinancingOffer) => {\r\n const minPurchase = offer.minPurchase ? offer.minPurchase : 0;\r\n let currentOfferAccepted = false;\r\n if (totalPrice >= minPurchase && minPurchase >= highestMinimumPurchase) {\r\n bestOffer = {\r\n numOfMonths: offer.noInterestFor,\r\n costPerMonth: Math.ceil(totalPrice / offer.noInterestFor),\r\n startDate: offer.offerValidStartDate,\r\n endDate: offer.offerValidEndDate,\r\n isLTO: false,\r\n minPurchase: offer.minPurchase || 0,\r\n everydayFinancingOfferMessage:offer.everydayFinancingOfferMessage,\r\n limitedFinancingOfferMessage:offer.limitedFinancingOfferMessage,\r\n offerName: offer.offerName,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer\r\n };\r\n highestMinimumPurchase = offer.minPurchase;\r\n offerFound = true;\r\n currentOfferAccepted = true;\r\n }\r\n if (returnCustomOfferArray && (totalPrice >= minPurchase)) {\r\n specialOffer?.push({\r\n numOfMonths: offer.noInterestFor,\r\n costPerMonth: Math.ceil(totalPrice / offer.noInterestFor),\r\n startDate: offer.offerValidStartDate,\r\n endDate: offer.offerValidEndDate,\r\n isLTO: false,\r\n minPurchase: offer.minPurchase || 0,\r\n everydayFinancingOfferMessage:offer.everydayFinancingOfferMessage,\r\n limitedFinancingOfferMessage:offer.limitedFinancingOfferMessage,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer,\r\n offerName: offer.offerName\r\n });\r\n highestMinimumPurchase = offer.minPurchase;\r\n offerFound = true;\r\n currentOfferAccepted = true;\r\n // @ts-ignore\r\n bestOffer = specialOffer;\r\n }\r\n // Do not use default if end date is defined and has expired\r\n if (currentOfferAccepted && offer.offerValidEndDate) {\r\n const endDate = dayjs(offer.offerValidEndDate, format);\r\n const now = dayjs();\r\n if (endDate.isValid() && now.isAfter(endDate)) {\r\n offerFound = false;\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n validLimitedTimeFinancingOffers.forEach((offer: IFinancingOffer) => {\r\n const minPurchase = offer.minPurchase ? offer.minPurchase : 0;\r\n\r\n if (totalPrice >= minPurchase && minPurchase > highestMinimumPurchase) {\r\n const currentOffer: IFinancingOfferFormatted = {\r\n numOfMonths: offer.noInterestFor,\r\n costPerMonth: Math.ceil(totalPrice / offer.noInterestFor),\r\n startDate: offer.offerValidStartDate,\r\n endDate: offer.offerValidEndDate,\r\n isLTO: true,\r\n minPurchase: offer.minPurchase,\r\n everydayFinancingOfferMessage:offer.everydayFinancingOfferMessage,\r\n limitedFinancingOfferMessage:offer.limitedFinancingOfferMessage,\r\n monthlyOfferDetails: offer.monthlyOfferDetails,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer,\r\n specialCampaign: offer.specialCampaignOffer,\r\n checkoutDisplay: offer.checkoutDisplay,\r\n offerName: offer.offerName\r\n };\r\n bestOffer = currentOffer;\r\n highestMinimumPurchase = offer.minPurchase;\r\n offerFound = true;\r\n\r\n // check if campaign schedule is scheduled, otherwise fall back to parent offer\r\n const validCampaign = getValidSpecialCampaign(currentOffer);\r\n if (validCampaign) {\r\n currentOffer.startDate = validCampaign.campaignValidStartDate;\r\n currentOffer.endDate = validCampaign.campaignValidEndDate;\r\n campaignFound = currentOffer;\r\n }\r\n else {\r\n campaignFound = undefined;\r\n }\r\n }\r\n });\r\n\r\n if (!offerFound || (!isScheduled(bestOffer) && everydayFinancingOffers.length)) {\r\n // try default offer\r\n offerFound = false;\r\n highestMinimumPurchase = 0;\r\n\r\n everydayFinancingOffers.forEach((offer: IFinancingOffer) => {\r\n const minPurchase = offer.minPurchase ? offer.minPurchase : 0;\r\n let currentOfferAccepted = false;\r\n if (totalPrice >= minPurchase && minPurchase >= highestMinimumPurchase) {\r\n bestOffer = {\r\n numOfMonths: offer.noInterestFor,\r\n costPerMonth: Math.ceil(totalPrice / offer.noInterestFor),\r\n isLTO: false,\r\n minPurchase: offer.minPurchase || 0,\r\n everydayFinancingOfferMessage:offer.everydayFinancingOfferMessage,\r\n limitedFinancingOfferMessage:offer.limitedFinancingOfferMessage,\r\n offerName: offer.offerName,\r\n monthlyOfferDetails: offer.monthlyOfferDetails,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer\r\n };\r\n highestMinimumPurchase = offer.minPurchase;\r\n offerFound = true;\r\n currentOfferAccepted = true;\r\n }\r\n\r\n if (returnCustomOfferArray && (totalPrice >= minPurchase)) {\r\n everydayOffers?.push({\r\n numOfMonths: offer.noInterestFor,\r\n costPerMonth: Math.ceil(totalPrice / offer.noInterestFor),\r\n isLTO: false,\r\n minPurchase: offer.minPurchase || 0,\r\n everydayFinancingOfferMessage:offer.everydayFinancingOfferMessage,\r\n limitedFinancingOfferMessage:offer.limitedFinancingOfferMessage,\r\n monthlyOfferDetails: offer.monthlyOfferDetails,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer,\r\n offerName: offer.offerName\r\n });\r\n highestMinimumPurchase = offer.minPurchase;\r\n offerFound = true;\r\n currentOfferAccepted = true;\r\n // @ts-ignore\r\n bestOffer = everydayOffers;\r\n }\r\n // Do not use default if end date is defined and has expired\r\n if (currentOfferAccepted && offer.offerValidEndDate) {\r\n const endDate = dayjs(offer.offerValidEndDate, format);\r\n const now = dayjs();\r\n if (endDate.isValid() && now.isAfter(endDate)) {\r\n offerFound = false;\r\n }\r\n }\r\n });\r\n }\r\n if (lowCostOffer?.length) {\r\n lowCostOffer.forEach((offer:ILowCostOffer) => {\r\n if(totalPrice <= offer.maxPurchase && offer.offerName?.toLowerCase() ==='low cost offer'){\r\n const LCO = {\r\n offerName: offer.offerName,\r\n maxPurchase: offer.maxPurchase || 0,\r\n lowCostFinancingOfferMessage: offer.lowCostFinancingOfferMessage,\r\n financingOfferDescription: offer.financingOfferDescription,\r\n disclaimer: offer.disclaimer\r\n };\r\n highestMinimumPurchase = offer.maxPurchase;\r\n offerFound = true;\r\n // @ts-ignore\r\n bestOffer = LCO;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (!offerFound) {\r\n return undefined;\r\n }\r\n if (campaignFound) {\r\n return campaignFound;\r\n }\r\n return bestOffer;\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\n\r\nimport { IFinancingOfferFormatted } from '../Utilities/select-financing-offer';\r\n\r\n/**\r\n * FinancingOfferState Input Action\r\n */\r\n\r\nexport class FinancingOfferStateInput implements Msdyn365.IActionInput {\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 = () => `FinancingOfferState`;\r\n public getCacheObjectType = () => 'FinancingOfferState';\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 IFinancingOfferStateData {\r\n isOpen: boolean;\r\n totalPrice?: number;\r\n financingOffer?: IFinancingOfferFormatted;\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 FinancingOfferStateInput();\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: FinancingOfferStateInput, ctx: Msdyn365.IActionContext): Promise {\r\n return { isOpen: false };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n id: 'FinancingOfferState',\r\n input: createInput\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 { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { FinancingOfferStateInput, IFinancingOfferStateData } from '../../../data-actions/financing-offer-state.action';\r\nimport { fireAnalyticsLink } from '../../../Utilities/analytics/clickTrack';\r\nimport {\r\n getCampaignRemainingCost,\r\n getValidSpecialCampaign,\r\n IFinancingOfferFormatted,\r\n selectFinancingOffer\r\n} from '../../../Utilities/select-financing-offer';\r\nimport { getQueryParamsFromQueryByName } from '../../../data-actions/utilities/utils';\r\nimport { variantQueryStringName } from '../../../Utilities/constants';\r\n\r\nexport type FinancingComponentPageType = 'PDP' | 'PLP';\r\n\r\nexport interface IFinancingPerMonthComponentProps {\r\n pageType: FinancingComponentPageType;\r\n sellingPrice: number;\r\n // tslint:disable-next-line:no-any\r\n context: ICoreContext<{ [x: string]: any }>;\r\n priceComponent?: JSX.Element;\r\n // VSI Customization - START\r\n sizeValue?: string | undefined;\r\n dimensionPrice?: number | undefined;\r\n percentDiff?: number | undefined;\r\n discountAmount?: number;\r\n categoryName?: String | undefined,\r\n activeVariantId: number | undefined,\r\n productId: number | undefined,\r\n activeColorVariantId: number | undefined,\r\n isLoadedPriceComponent?: boolean | undefined\r\n // VSI Customization - END\r\n}\r\n\r\nexport const FinancingPerMonthComponent: React.FC = ({\r\n pageType,\r\n sellingPrice,\r\n context,\r\n priceComponent,\r\n sizeValue,\r\n dimensionPrice,\r\n percentDiff,\r\n discountAmount,\r\n categoryName,\r\n activeVariantId,\r\n productId,\r\n activeColorVariantId,\r\n isLoadedPriceComponent\r\n}) => {\r\n const selectedFinancingOffer: IFinancingOfferFormatted | undefined = selectFinancingOffer({\r\n limitedTimeFinancingOffers: context.app.config.limitedTimeFinancingOffers,\r\n everydayFinancingOffers: context.app.config.everydayFinancingOffers,\r\n lowCostOffer : context.app.config.lowCostFinancingOffers,\r\n totalPrice: sellingPrice\r\n });\r\n\r\n if (!sellingPrice) {\r\n return null;\r\n }\r\n const monthlyCost = selectedFinancingOffer && Math.ceil(sellingPrice / selectedFinancingOffer.numOfMonths);\r\n const stateUpdate: IFinancingOfferStateData = {\r\n isOpen: true,\r\n totalPrice: sellingPrice,\r\n financingOffer: selectedFinancingOffer\r\n };\r\n const url = new URL(window.location.href.toString());\r\n const variantId = Number(getQueryParamsFromQueryByName(url, variantQueryStringName)) || undefined;\r\n const openModal = () => {\r\n fireAnalyticsLink({\r\n eventName: 'internal navigation',\r\n eventCategory: 'internal links',\r\n eventAction: 'to: Financing Per Month modal',\r\n eventLabel: `from ${pageType} Financing Per Month “Learn How” link`,\r\n eventNoninteraction: 'false'\r\n });\r\n context.actionContext.update(new FinancingOfferStateInput(), stateUpdate);\r\n };\r\n // format currency and strip trailing zeros\r\n // TODO: remove the cents portion in a dynamic way for all currencies\r\n const formattedMonthlyCost = monthlyCost && context.cultureFormatter.formatCurrency(monthlyCost);\r\n const monthlyCostStrippedZeros = formattedMonthlyCost && formattedMonthlyCost.substring(0, formattedMonthlyCost.length - 3);\r\n\r\n const campaign = selectedFinancingOffer && getValidSpecialCampaign(selectedFinancingOffer);\r\n const campaignRemainingCost =\r\n campaign && selectedFinancingOffer && getCampaignRemainingCost(campaign, selectedFinancingOffer, sellingPrice);\r\n\r\n const formattedCampaignCost =\r\n campaign && campaignRemainingCost && context.cultureFormatter.formatCurrency(Math.ceil(campaignRemainingCost.cost));\r\n const campaignCostStrippedZeros = formattedCampaignCost && formattedCampaignCost?.substring(0, formattedCampaignCost.length - 3);\r\n\r\n const everydayFinancingMessage = context.app.config.everydayFinancingMessage;\r\n const limitedFinancingMessage = context.app.config.limitedFinancingMessage;\r\n const limitedCampaignFinancingMessage = context.app.config.limitedCampaignFinancingMessage;\r\n\r\n const sellingPriceDollars = sellingPrice.toFixed(2).split('.')[0];\r\n const sellingPriceCents = sellingPrice.toFixed(2).split('.')[1];\r\n\r\n const dimensionDollars = dimensionPrice?.toFixed(2).split('.')[0];\r\n const dimensionCents = dimensionPrice?.toFixed(2).split('.')[1];\r\n const readyToShow = activeVariantId === productId || activeColorVariantId === productId || variantId === productId || pageType === \"PLP\";\r\n const promotionalPeriod = selectedFinancingOffer?.numOfMonths;\r\n const validThroughDate = selectedFinancingOffer && selectedFinancingOffer.isLTO && (promotionalPeriod === 36 || promotionalPeriod === 48 || promotionalPeriod === 60) ? '' : ` Valid thru ${selectedFinancingOffer?.endDate} `;\r\n // tslint:disable: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role\r\n return pageType === 'PDP' ? (\r\n
\r\n
\r\n
0 && Number(percentDiff) < 100 && discountAmount !== 0 ? 'product-price' : 'product-price-black'}>\r\n\r\n {Number(percentDiff) > 0 && discountAmount !== 0 ? readyToShow ?\r\n <>\r\n ${sellingPriceDollars}\r\n {sellingPriceCents}\r\n \r\n \r\n ${dimensionDollars}\r\n {dimensionCents}\r\n \r\n {percentDiff && percentDiff.toFixed()}% Off\r\n \r\n : <> : readyToShow ? priceComponent || (\r\n <>\r\n ${sellingPriceDollars}\r\n {sellingPriceCents}\r\n ) : <>\r\n }\r\n
\r\n
\r\n {selectedFinancingOffer && (\r\n <>\r\n {campaign && campaignRemainingCost ? (\r\n
\r\n {/* commented as per story no 21902 */}\r\n {/*
Pay as low as
*/}\r\n
or {`$${Math.ceil(\r\n campaign.initialMonthlyAmount\r\n )}/mo for the first ${campaign.numOfDiscountedMonths} months`}
\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
e.stopPropagation()}>\r\n {/* {`Then $${Math.ceil(campaignRemainingCost.cost)}/mo for ${\r\n campaignRemainingCost?.months\r\n } months with 0% APR with Mattress Firm Credit Card.Limited Time.`} */}\r\n {limitedCampaignFinancingMessage &&\r\n limitedCampaignFinancingMessage\r\n .replace('{campaignCost}', campaignCostStrippedZeros)\r\n .replace('{campaignMonths}', campaignRemainingCost?.months)}\r\n \r\n Learn How\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n ) : selectedFinancingOffer.offerName?.toLowerCase() ==='low cost offer' ?\r\n
\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
e.stopPropagation()}>\r\n {selectedFinancingOffer.lowCostFinancingOfferMessage}\r\n \r\n Learn How\r\n \r\n
\r\n
:(\r\n
\r\n {/* commented as per story no 21902 */}\r\n {/*
Pay as low as
*/}\r\n {/*
\r\n {pageType === 'PDP' ? `${monthlyCostStrippedZeros}/mo` : `${monthlyCostStrippedZeros} / mo`}\r\n
*/}\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
e.stopPropagation()}>\r\n {/* {pageType === 'PDP' ? `${monthlyCostStrippedZeros}/mo` : `${monthlyCostStrippedZeros} / mo`} */}\r\n {selectedFinancingOffer.isLTO\r\n ? `${limitedFinancingMessage &&\r\n limitedFinancingMessage.replace(\r\n '{numOfMonths}',\r\n selectedFinancingOffer.numOfMonths\r\n )}${(pageType === 'PDP' && validThroughDate)}`\r\n : everydayFinancingMessage &&\r\n everydayFinancingMessage\r\n .replace('{monthlyCostStrippedZeros}', monthlyCostStrippedZeros)\r\n .replace('{numOfMonths}', selectedFinancingOffer.numOfMonths)}\r\n {/* ? `0% Interest with ${\r\n selectedFinancingOffer.numOfMonths\r\n } equal monthly payments. Limited Time.${(pageType === 'PDP' &&\r\n ` Valid thru ${selectedFinancingOffer.endDate} `) ||\r\n ''}`\r\n :`Suggested payments with ${selectedFinancingOffer.numOfMonths} months special financing. `} */}\r\n \r\n Learn How\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n ) : (\r\n
\r\n
\r\n {/* VSI Customization - START */}\r\n
{pageType === 'PLP' ? (sizeValue ? sizeValue : 'Starting at') : null}
\r\n {/* VSI Customization - END */}\r\n
{priceComponent || `${context.cultureFormatter.formatCurrency(sellingPrice)}`}
\r\n
\r\n {selectedFinancingOffer && (\r\n <>\r\n
\r\n OR\r\n
\r\n {campaign && campaignRemainingCost ? (\r\n
\r\n {/* commented as per story no 21902 */}\r\n {/*
Pay as low as
*/}\r\n
{`$${Math.ceil(\r\n campaign.initialMonthlyAmount\r\n )}/mo for the first ${campaign.numOfDiscountedMonths} months`}
\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
e.stopPropagation()}>\r\n {/* {`Then $${Math.ceil(campaignRemainingCost.cost)}/mo for ${\r\n campaignRemainingCost?.months\r\n } months with 0% APR with Mattress Firm Credit Card.Limited Time.`} */}\r\n {limitedCampaignFinancingMessage &&\r\n limitedCampaignFinancingMessage\r\n .replace('{campaignCost}', campaignCostStrippedZeros)\r\n .replace('{campaignMonths}', campaignRemainingCost?.months)}\r\n \r\n
\r\n
\r\n )\r\n :\r\n selectedFinancingOffer.offerName?.toLowerCase() ==='low cost offer' ?\r\n
\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
e.stopPropagation()}>\r\n

{selectedFinancingOffer.lowCostFinancingOfferMessage?.replace('.','.\\n')}

\r\n \r\n
\r\n
\r\n :(\r\n
\r\n {/* tslint:disable-next-line: react-this-binding-issue jsx-no-lambda react-a11y-event-has-role*/}\r\n
\r\n {pageType === 'PLP' ? `${monthlyCostStrippedZeros}/mo` : `${monthlyCostStrippedZeros} / mo`}\r\n
\r\n
e.stopPropagation()}>\r\n {selectedFinancingOffer.isLTO\r\n ? `${limitedFinancingMessage &&\r\n limitedFinancingMessage.replace(\r\n '{numOfMonths}',\r\n selectedFinancingOffer.numOfMonths\r\n ).replace('{monthlyCostStrippedZeros}', monthlyCostStrippedZeros)\r\n }`\r\n : everydayFinancingMessage &&\r\n everydayFinancingMessage\r\n .replace('{numOfMonths}', selectedFinancingOffer.numOfMonths)\r\n .replace('{monthlyCostStrippedZeros}', monthlyCostStrippedZeros)\r\n }\r\n \r\n
\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n"],"names":["fireAnalyticsLink","searchTerm","searchType","eventName","eventCategory","eventAction","eventLabel","eventType","eventNoninteraction","enhancedAction","generalConfig","promoConfig","productConfig","customerConfig","productImpressionConfig","callUtagLink","event","event_category","event_action","event_label","event_type","event_noninteraction","enhanced_action","search_term","search_type","BVRatingSummary","itemId","onClick","variantId","hideReadReviewsButton","dataBvProductIdAttr","setDataBvProductIdAttr","useState","wrapper","useRef","interval","numReviews","current","querySelector","innerHTML","match","useEffect","style","display","React","onMouseEnter","window","setInterval","button","Array","from","document","querySelectorAll","find","outerHTML","onMouseLeave","clearInterval","ref","dayjs","tz","utc","isBetween","format","defaultImageSettings","viewports","xs","q","w","h","disableLazyLoad","parseBadgeData","badgeData","requestContext","dataSegments","scheduleStart","scheduleEnd","badgeType","parsedScheduleStart","startDate","startTime","parsedScheduleEnd","endDate","endTime","split","e","startMoment","replace","endMoment","startMomentFormatted","endMomentFormatted","isValid","baseUrl","apiSettings","baseImageUrl","substring","length","removed$","parsedBadgeType","toLowerCase","altText","src","alt","start","convertTimeZone","end","time","local","buildProductBadge","parsedBadgeData","Image","className","gridSettings","title","imageSettings","renderProductBadge","attributeName","finalizedBadges","map","badge","parsedBadge","fallBackBrandAttribute","parseBrandName","attributes","backendAttribute","recordId","attribute","productBrandName","hasArray","currAttribute","Name","trim","TextValue","MsDyn365","getLocalStorage","localStorage","getItem","bonusItemArray","JSON","parse","checkBrandName","item","productId","brandName","parseBrandNameUnbxd","getBrandNameCheck","getValidSpecialCampaign","financingOffer","specialCampaign","enableCampaign","initialMonthlyAmount","numOfDiscountedMonths","isCampaignScheduled","getCampaignRemainingCost","campaign","totalPrice","remainingCost","remainingMonths","numOfMonths","cost","months","offer","tempOffer","Object","create","campaignValidStartDate","campaignValidEndDate","isScheduled","add","startDateCentralTime","endDateCentralTime","now","selectFinancingOffer","returnCustomOfferArray","campaignFound","limitedTimeFinancingOffers","everydayFinancingOffers","lowCostOffer","specialFinancingOffer","synchronySpecialFinancingCondition","specialFinancingEnable","highestMinimumPurchase","bestOffer","costPerMonth","isLTO","minPurchase","everydayFinancingOfferMessage","limitedFinancingOfferMessage","monthlyOfferDetails","financingOfferDescription","disclaimer","offerFound","everydayOffers","specialOffer","validLimitedTimeFinancingOffers","filter","offerValidStartDate","offerValidEndDate","isValidLimitedTimeOffer","forEach","currentOfferAccepted","noInterestFor","Math","ceil","offerName","push","isAfter","currentOffer","specialCampaignOffer","checkoutDisplay","validCampaign","undefined","maxPurchase","LCO","lowCostFinancingOfferMessage","FinancingOfferStateInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","Msdyn365","action","async","input","ctx","isOpen","id","args","FinancingPerMonthComponent","pageType","sellingPrice","context","priceComponent","sizeValue","dimensionPrice","percentDiff","discountAmount","categoryName","activeVariantId","activeColorVariantId","isLoadedPriceComponent","selectedFinancingOffer","app","config","lowCostFinancingOffers","monthlyCost","stateUpdate","url","URL","location","href","toString","Number","getQueryParamsFromQueryByName","variantQueryStringName","openModal","actionContext","update","formattedMonthlyCost","cultureFormatter","formatCurrency","monthlyCostStrippedZeros","campaignRemainingCost","formattedCampaignCost","campaignCostStrippedZeros","everydayFinancingMessage","limitedFinancingMessage","limitedCampaignFinancingMessage","sellingPriceDollars","toFixed","sellingPriceCents","dimensionDollars","dimensionCents","readyToShow","promotionalPeriod","validThroughDate","stopPropagation","role"],"sourceRoot":""}