{"version":3,"file":"static/js/1d8879f557ada9907f3f.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/common/automation/data-testids.ts?225a","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/pencil-banner-adaptor/pencilBannerAdaptor.ts?a9ab","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/util/is-scheduled.ts?57af","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/pencil-banner-components/PencilBannerCountDown.tsx?61f8","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/util/html-to-text.ts?7843","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/pencil-banner-components/PencilBannerHTML.tsx?76ab","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/pencil-banner-components/PencilBannerCTA.tsx?55ac","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/pencil-banner-components/PencilBannerMessage.tsx?9bb0","webpack://mattressfirm/./src/mfrm-components/components/Carousel/useCarousel.ts?ffda","webpack://mattressfirm/./src/mfrm-components/components/Carousel/index.tsx?8422","webpack://mattressfirm/./src/mfrm-components/components/Carousel/utils.ts?267a","webpack://mattressfirm/./src/mfrm-components/mfrm-pencil-banner/MFRMPencilBanner.tsx?4b71","webpack://mattressfirm/./src/themes/mattressfirm/views/promo-banner.view.tsx?dbcd","webpack://mattressfirm/./lib/promo-banner/module-registration.js?d732","webpack://mattressfirm/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://mattressfirm/./src/modules/promo-banner/components/links.tsx?2587","webpack://mattressfirm/./src/modules/promo-banner/components/text.tsx?782b","webpack://mattressfirm/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://mattressfirm/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["export enum CustomerInfoDataTestIds {\r\n customerInfoHeading = 'customerinfoCustomerInfoHeading',\r\n deliveryPageHeading = 'deliveryDeliveryHeading',\r\n paymentPageHeading = 'paymentPageTitle',\r\n FirstName = 'customerinfoShippingAddressFirstName',\r\n LastName = 'customerinfoShippingAddressLastName',\r\n Email = 'customerinfoShippingAddressEmail',\r\n Phone = 'customerinfoShippingAddressPhone',\r\n EmailMeNewsCheckBox = 'customerinfoEmailM',\r\n BillingAddressSameCheckBox = 'paymentCheckoutBillingAddressCheckBox',\r\n Address = 'customerinfoShippingAddressAddress',\r\n Apt = 'customerinfoShippingAddressApt',\r\n ZipCode = 'customerinfoShippingAddressZipCode',\r\n City = 'customerinfoShippingAddressCity',\r\n State = 'customerinfoShippingAddressState',\r\n ExpressCustomerInfo = 'customerinfoHeading'\r\n}\r\n\r\nexport enum CheckoutStepperDataTestIds {\r\n customerInfoStepper = 'customerinfoStepperModuleWrapper',\r\n deliveryInfoStepper = 'deliveryStepperModuleWrapper',\r\n paymentInfoStepper = 'paymentstepperModuleWrapper'\r\n}\r\n\r\nexport const SynchronyFinnacinTestIds = [\r\n { learnhow: 'paymentSynchrony6monthLearnHowLink', radio: 'paymentSynchrony6monthRadioSelect' },\r\n { learnhow: 'paymentSynchrony12monthLearnHowLink', radio: 'paymentSynchrony12monthRadioSelect' },\r\n { learnhow: 'paymentSynchrony24monthLearnHowLink', radio: 'paymentSynchrony24monthRadioSelect' }\r\n];\r\n\r\nexport enum PaymentSteppDataTestIds {\r\n CreditCardRadioSelect = \"paymentCreditCardRadioSelectButton\",\r\n Creditcardicons = \"paymentCreditCardIconsImage\",\r\n CheckoutBillingaddressCheckBox = \"paymentCheckoutBillingAddressCheckBox\",\r\n PayPalRadioSelect = \"paymentPayPalRadioSelectButton\",\r\n PayPalInstrumentalInfo = \"paymentPayPalInfo\",\r\n SynchronyRadioSelect = \"paymentSynchronyRadioSelectButton\",\r\n SynchronyImage = \"paymentSynchronyIconImage\",\r\n SynchronyPrequalify = \"paymentSynchronyPrequalifyButton\",\r\n Synchronyuseexistingaccount = \"paymentSynchronyUseExistingAccountButton\",\r\n Checkoutguidedcardcontent = \"paymentCheckoutGuidedCardContent\",\r\n Checkouteditcustomerinfo = \"paymentCheckoutEditCustomerInfoLink\",\r\n Deliverysummarycontent = \"paymentDeliverySummaryContent\",\r\n Deliverycontentedit = \"paymentDeliveryContentIdLink\",\r\n Submitorder = \"paymentSubmitOrderButton\"\r\n}\r\n\r\nexport enum CheckoutButtonDataTestIds {\r\n SubmitOrderId = 'paymentSubmitOrderButton',\r\n ContinueToDeliveryId = 'customerinfoContinueDeliveryButton',\r\n ContinueToPaymentId = 'deliveryContinueToPaymentButton'\r\n}\r\n\r\nexport enum DeliveryDataTestIds {\r\n DeliveryOptionSchedule = \"deliveryDeliveryOptionScheduleTitle\",\r\n DeliveryOptionsLinkWrapper = \"deliveryDeliveryOptionLinkWrapper\",\r\n DeliveryOptionScheduleDateButton = \"deliveryDeliveryOptionScheduleDateButton\",\r\n DeliveryTimeSelect = \"deliveryDeliveryTimeSelectOption\",\r\n DeliveryOptionHeading = \"deliveryDeliveryOptionTitle\",\r\n DeliveryOptionServiceWrapper = \"deliveryDeliveryOptionServiceWrapper\"\r\n}\r\n\r\nexport enum OrderSummaryCheckoutDataTestIds {\r\n OrderSummaryHeading = \"OrderSummaryHeading\",\r\n ItemsSubtotallabel = \"OrderSummaryLineSubTotalLabel\",\r\n ItemsSubtotal = \"OrderSummaryLineSubTotal\",\r\n SavingsLabel = \"OrderSummarySavingsLabel\",\r\n Savings = \"OrderSummarySavings\",\r\n TaxLabel = \"OrderSummaryTaxLabel\",\r\n Tax = \"OrderSummaryTax\",\r\n TotalLabel = \"OrderSummaryLineTotaLabel\",\r\n Total = \"OrderSummaryLineTotal\"\r\n}\r\n\r\nexport enum CartDataTestIds {\r\n PencilBanner = \"promoBanner\",\r\n StepperModuleWrapper = \"cartpageStepperModuleWrapper\",\r\n ShoppingCartHeading = \"cartpageShoppingCartHeading\",\r\n ZipCodeLink = \"cartpageDeliveryMessageLink\",\r\n QtyDropDown = \"cartpageQtySelectMenu\",\r\n DeleteItemLink = \"cartpageRemoveItemButton\",\r\n AddPromoCode = \"cartpageAddPromoCodeLink\",\r\n CheckoutButton = \"cartpageCheckoutButton\",\r\n PayPalButton = \"cartpagePaypalLogoButton\",\r\n CreditCardLearnHowLink = \"cartpageMattressfirmCreditCardLearnHowLink\",\r\n LookForLeaseLearnHowLink = \"cartpageLookForLeasetoOptionLearnHowLink\",\r\n SleepExpertLinks = \"cartpageTalkToSleepExpert{buttonType}Link\",\r\n}\r\n\r\nexport enum PaypalExpressDataTestIds {\r\n PaypalCustomerInfoHeading = 'PayPalExpresscustomerInfoHeading',\r\n PaypalStepperModule = 'PayPalExpressStepperModuleWrapper',\r\n PaypalFirstName = 'PayPalExpressshippingAddressfirstname',\r\n PaypalLastName = 'PayPalExpressshippingAddresslastname',\r\n PaypalEmail = 'PayPalExpressshippingAddressEmail',\r\n PaypalPhone = 'PayPalExpressshippingAddressPhone',\r\n PaypalAddress = 'PayPalExpressshippingAddressAddress',\r\n PaypalApt = 'customerinfoShippingAddressApt',\r\n PaypalZipCode = 'PayPalExpressshippingAddressZipcode',\r\n PaypalCity = 'PayPalExpressshippingAddressCity',\r\n SaveandContinueBtn = 'PayPalExpressSaveandContinueButton',\r\n ExpressDeliveryHeading = 'PayPalExpressdeliveryHeading',\r\n ExpressDeliveryContent = 'PayPalExpressdeliveryContent',\r\n ExpressDeliveryEditLink = 'PayPalExpressdeliveryEditLink',\r\n ExpressPaymentHeading = 'PayPalExpresspaymentMethodHeading',\r\n ExpressReviewEmail = 'PayPalExpressreviewEmail',\r\n ExpressPaymentEdit = 'PayPalExpresspaymentEditEditLink',\r\n ExpressOrderSummaryHeading = 'PayPalExpressorderSummaryHeading',\r\n ExpressItemsSubtotal = 'PayPalExpressorderSummarylineSubtotal',\r\n ExpressSavings = 'PayPalExpressorderSummarySavings',\r\n ExpressTax = 'PayPalExpressorderSummaryTax',\r\n ExpressTotal = 'PayPalExpressorderSummarylineTotal',\r\n ExpressorderReviewHeading = 'PayPalExpressorderReviewHeading',\r\n ExpressorderReviewContainer = 'PayPalExpressorderReviewPaypalExpressContainer',\r\n ExpresssubmitOrderBtn = 'PayPalExpresssubmitOrderButton'\r\n}\r\n\r\n//data testid's that will be used on OC page\r\nexport enum OrderConfirmationDataTestIds {\r\n ThanksTitle = \"confirmationThankYouTitle\",\r\n OrderNumber = \"confirmationOrderNumber\",\r\n OrderPlacedLabel = \"confirmationOrderPlacedLabel\",\r\n OrderPlacedDetails = \"confirmationOrderPlacedDetails\",\r\n OrderNumberDetails = \"confirmationOrderNumberDetails\",\r\n CustomerInfo = \"confirmationCustomerInfoSection\",\r\n DeliverySection = \"confirmationDeliverySection\",\r\n OrderSummary = \"confirmationOrderSummary\",\r\n OrderSummaryDeliveryLabel = \"confirmationSummaryDeliveryLabel\",\r\n OrderSummaryShippingLabel = \"confirmationSummaryShipLabel\",\r\n OrderSummaryShippingAmount = \"confirmationSummaryShipAmount\",\r\n DeliveryLabel = \"confirmationDeliveryLabel\",\r\n DeliveryProductName = \"confirmationProductName\",\r\n ProductDiscount = \"confirmationDiscountPrice\",\r\n ProductQuantity = \"confirmationQty\",\r\n DeliveryDate = \"confirmationDeliveryDate\",\r\n ProductSize = \"confirmationSize\",\r\n DiscountPercent = \"confirmationDiscountPercent\",\r\n OriginalPriceStrikeThrough = \"confirmationStrikethrough\",\r\n DeliveryProductPrice = \"confirmationNormalPrice\",\r\n TaxLabel = \"confirmationTaxLabel\",\r\n SavingsLabel = \"confirmationItemsSavingsLabel\",\r\n ItemsLabel = \"confirmationItemsLabel\",\r\n TotalLabel = \"confirmationTotalLabel\",\r\n TaxAmount = \"confirmationTaxAmount\",\r\n SavingsAmount = \"confirmationItemsSavingsAmount\",\r\n ItemsTotal = \"confirmationItemsTotal\",\r\n OrderSummaryDeliveryFee = \"confirmationDeliveryFee\",\r\n TotalAmount = \"confirmationTotalAmount\",\r\n PaymentLabel = \"confirmationPaymentLabel\",\r\n PaymentInfo = \"confirmationPaymentDetail\",\r\n DeliveryAddress = \"confirmationDeliveryAddress\",\r\n Email = \"confirmationEmail\",\r\n Phone = \"confirmationPhone\",\r\n BillingMessage = \"confirmationBillingMessage\",\r\n ContactMessage = \"confirmationContactMessage\",\r\n ReceiptEmail = \"confirmationSentEmailToMessage\",\r\n DeliveryTypeLabel = \"confirmationDeliveryTypeLabel\",\r\n ShippingProductName = \"confirmationShippingLineItem\",\r\n ShippingSection = \"confirmationShippingSection\",\r\n ShippingSectionTitle = \"confirmationShippingTitle\",\r\n ShippingNumber = \"confirmationShipmentNumber\",\r\n ShippingSectionSize = \"confirmationSectionSize\",\r\n ShippingSectionQuantity = \"confirmationSectionQTY\",\r\n ShippingSectionPrice = \"confirmationShipLineItemPrice\"\r\n}","/* eslint-disable @typescript-eslint/restrict-plus-operands */\r\nimport { IMfrmHeaderData } from \"../../../modules/mfrm-header/mfrm-header.data\";\r\nimport { IPromoBannerConfig, IPromoBannerProps } from \"../../../themes/mattressfirm/definition-extensions/promo-banner.ext.props.autogenerated\";\r\n\r\nexport interface UIPencilBannerData {\r\n interval: Number | undefined\r\n items?: UIPencilBannerItem [] | null\r\n next?: UICarouselButton | null\r\n previous?: UICarouselButton | null\r\n}\r\n\r\nexport interface UIPencilBannerItem extends UILink {\r\n enableBanner: Boolean\r\n html: String\r\n schedule?: UIDateRange\r\n countdown?: UIDateRange\r\n }\r\n\r\nexport interface UIDateRange {\r\n start: String | undefined\r\n end: String | undefined\r\n}\r\n\r\nexport interface UILink {\r\n ariaLabel?: String | null\r\n label: String | undefined\r\n type?: UILinkType [] | null\r\n url: String | undefined\r\n}\r\n\r\nenum UILinkType {\r\n CHAT\r\n}\r\n\r\nexport interface UICarouselButton {\r\n ariaLabel?: String\r\n image?: {\r\n url: String\r\n }\r\n label?: String\r\n}\r\n\r\nexport const d365ToPencilBannerData = (mfrmPencilBanner: IPromoBannerProps & IPromoBannerConfig | undefined ) => {\r\n if (mfrmPencilBanner) {\r\n return {\r\n interval: mfrmPencilBanner.config.interval,\r\n items :\r\n mfrmPencilBanner?.config.mfrmBannerMessages?.map(item => {\r\n return {\r\n enableBanner: item.enableBanner,\r\n ariaLabel: item?.name,\r\n countdown : {\r\n end: (item.countdownSchedule?.enableCountdown ? (`${item?.countdownSchedule?.endDate!}T${item?.countdownSchedule?.endTime!}`) : undefined),\r\n start: (item.countdownSchedule?.enableCountdown ? (`${item?.countdownSchedule?.startDate!}T${item?.countdownSchedule?.startTime!}`) : undefined)\r\n },\r\n html: item.richText,\r\n label: item.links?.map((label: any) => { return label.linkText; })[0],\r\n schedule: {\r\n end: (item.bannerSchedule?.enableBannerSchedule ? (`${item?.bannerSchedule?.endDate!}T${item?.bannerSchedule?.endTime!}`) : undefined),\r\n start: (item.bannerSchedule?.enableBannerSchedule ? (`${item?.bannerSchedule?.startDate!}T${item?.bannerSchedule?.startTime!}`) : undefined)\r\n },\r\n url: item.links?.map((url: any) => { return url.linkUrl.destinationUrl; })[0]\r\n };\r\n }),\r\n next: {\r\n ariaLabel: mfrmPencilBanner?.config?.next?.altText,\r\n image: {\r\n url: mfrmPencilBanner?.config?.next?.src\r\n },\r\n label: mfrmPencilBanner?.config?.next?.label\r\n },\r\n previous: {\r\n ariaLabel: mfrmPencilBanner?.config?.previous?.altText,\r\n image: {\r\n url: mfrmPencilBanner?.config?.previous?.src\r\n },\r\n label:mfrmPencilBanner?.config?.previous?.label\r\n }\r\n\r\n };\r\n } return null;\r\n};\r\n\r\n\r\n//BedHub Data\r\nexport const bedhubToPencilBannerData = (bedhubData: IMfrmHeaderData | undefined) => {\r\n if (bedhubData !== undefined || null) {\r\n return {\r\n interval: bedhubData?.interval,\r\n items :\r\n bedhubData?.items?.map((item: any) => {\r\n return {\r\n enableBanner: true,\r\n ariaLabel: item.ariaLabel,\r\n countdown : {\r\n end: item?.countdown?.end,\r\n start: item?.countdown?.start\r\n },\r\n html: item.html,\r\n label: item.label,\r\n schedule: {\r\n end: item?.schedule?.end,\r\n start: item?.schedule?.start\r\n },\r\n type: item.type,\r\n url: item.url\r\n };\r\n }),\r\n next: {\r\n ariaLabel: bedhubData?.next?.ariaLabel,\r\n image: {\r\n url: bedhubData?.next?.image.url\r\n },\r\n label: bedhubData?.next?.label\r\n },\r\n previous: {\r\n ariaLabel: bedhubData?.previous?.ariaLabel,\r\n image: {\r\n url: bedhubData?.previous?.image.url\r\n },\r\n label: bedhubData?.previous?.label\r\n }\r\n };\r\n }\r\n return null;\r\n};","import dayjs from 'dayjs';\r\n//checks if banner is currently scheduled\r\nexport const isScheduled = (schedule: {end: string | undefined, start: string | undefined}): Boolean => {\r\n //check if start/end is undefined.\r\n if (!schedule.start && !schedule.end) {\r\n return true;\r\n }\r\n const format = 'M/D/YYYY H:m:s';\r\n\r\n const splitStartSchedule = schedule.start ? schedule.start.split(\"T\") : null;\r\n const startDate = splitStartSchedule ? splitStartSchedule[0] : null;\r\n const startTime = splitStartSchedule ? splitStartSchedule[1] : null;\r\n const start = dayjs(`${startDate} ${startTime}`, format);\r\n\r\n const splitEndSchedule = schedule.end ? schedule.end.split(\"T\") : null;\r\n const endDate = splitEndSchedule ? splitEndSchedule[0] : null;\r\n const endTime = splitEndSchedule ? splitEndSchedule[1] : null;\r\n const end = dayjs(`${endDate} ${endTime}`, format);\r\n\r\n // check if schedule is valid\r\n const validStart = start && start.isValid();\r\n const validEnd = end && end.isValid();\r\n\r\n if (!validStart || !validEnd) {\r\n return false;\r\n }\r\n\r\n const now = dayjs();\r\n\r\n return now.isBetween(start, end);\r\n };","import React from 'react';\r\nimport dayjs from 'dayjs';\r\nimport Countdown, { CountdownRenderProps} from 'react-countdown';\r\nimport { isScheduled } from '../util/is-scheduled';\r\n\r\nexport const PencilBannerCountDown = (props: any) => {\r\n const countdownData = props.countdownData;\r\n //check if coundown start/end is undefined;\r\n if(!countdownData.end && !countdownData.start) { return null; }\r\n // check if countdown is scheduled to show\r\n if (!isScheduled(countdownData)) { return null; }\r\n\r\n const format = 'M/D/YYYY H:m:s';\r\n const splitEndSchedule = countdownData.end ? countdownData.end.split(\"T\") : null;\r\n const endDate = splitEndSchedule ? splitEndSchedule[0] : null;\r\n const endTime = splitEndSchedule ? splitEndSchedule[1] : null;\r\n const scheduleEnd = dayjs(`${endDate} ${endTime}`, format);\r\n\r\n //formatting count down\r\n const renderer = ({ formatted }: CountdownRenderProps) => {\r\n\r\n const days = formatted.days === '00' ? null : {formatted.days}:;\r\n\r\n return (\r\n \r\n {days}{formatted.hours}:{formatted.minutes}:\r\n {formatted.seconds}\r\n \r\n );\r\n };\r\n return (\r\n <>\r\n \r\n \r\n );\r\n};\r\n\r\n\r\n","export const htmltoText = (html: string) => {\r\n // Create a new div element\r\n const tempDivElement = document.createElement('div');\r\n\r\n // Set the HTML content with the given value\r\n // tslint:disable-next-line: no-inner-html\r\n tempDivElement.innerHTML = html;\r\n\r\n // Retrieve the text property of the element\r\n return tempDivElement.textContent || tempDivElement.innerText || '';\r\n };","import React from 'react';\r\nimport { htmltoText } from '../util/html-to-text';\r\n\r\ninterface IPencilBannerHTML {\r\n bannerHTML: string;\r\n url: string;\r\n}\r\n\r\nexport const PencilBannerHTML: React.FC = ({ bannerHTML, url }) => {\r\n const handleAnalytics = () => {\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'pencil banner tracking',\r\n event_category: 'pencil banner tracking',\r\n event_action: 'pencil banner click',\r\n event_label: `${htmltoText(bannerHTML).trim()}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n window.location.href = url;\r\n };\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n handleAnalytics();\r\n };\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { htmltoText } from '../util/html-to-text';\r\n\r\ninterface IPencilBannerCTA {\r\n ctaText: string;\r\n url: string;\r\n bannerHtml: string;\r\n}\r\n\r\nexport const PencilBannerCTA: React.FC = ({ctaText, url, bannerHtml }) => {\r\n\r\n const handleAnalytics = () => {\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'pencil banner tracking',\r\n event_category: 'pencil banner tracking',\r\n event_action: 'pencil banner click',\r\n event_label: `${htmltoText(bannerHtml).trim()}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n window.location.href = url;\r\n };\r\n\r\n const handleClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n handleAnalytics();\r\n };\r\n\r\n return (\r\n \r\n {ctaText}\r\n \r\n );\r\n};\r\n","import React, { useRef } from 'react';\r\nimport { PencilBannerCountDown } from './PencilBannerCountDown';\r\nimport { PencilBannerHTML } from './PencilBannerHTML';\r\nimport { PencilBannerCTA } from './PencilBannerCTA';\r\nimport { CartDataTestIds } from '../../../common/automation/data-testids';\r\n\r\nexport const PencilBannerMessage = ( props:any ) => {\r\n const {slideInfo} = props;\r\n const messageRef = useRef(null);\r\n const ariaHiddenNode = messageRef?.current?.parentNode as HTMLDivElement;\r\n const anchorRef = useRef(null);\r\n const currentNode = anchorRef?.current as HTMLAnchorElement;\r\n const isMessageHidden = ariaHiddenNode?.getAttribute('aria-hidden') === 'true';\r\n currentNode?.setAttribute(\"tabIndex\", isMessageHidden ? \"-1\" : \"0\");\r\n const handleKeyDown = (e: {key: string}, url?:string) => {\r\n if (e.key === 'Enter') {\r\n window.location.href= url ? url : '';\r\n }\r\n };\r\n\r\n return (\r\n
\r\n handleKeyDown(slideInfo?.url)}\r\n tabIndex={-1}\r\n ref={anchorRef}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\n\r\nimport { CarouselHook } from './types';\r\nimport _getViewPort from '../../../Utilities/get-view-port';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nconst useCarousel: CarouselHook = ({\r\n slides = [],\r\n allowTouchMove = false,\r\n autoplay = {},\r\n onSlideChange = () => null\r\n}) => {\r\n const [index, setIndex] = useState(0);\r\n const [realIndex, setRealIndex] = useState(0);\r\n const [play, setPlay] = useState(false);\r\n const intervalRef = useRef();\r\n const desktopViewport = 768;\r\n const { lastSlideIndex, slideCount } = useMemo<{\r\n lastSlideIndex: number;\r\n slideCount: number;\r\n }>(\r\n () => ({\r\n lastSlideIndex: slides.length - 1,\r\n slideCount: slides.length\r\n }),\r\n [slides.length]\r\n );\r\n\r\n\r\n const enableMouseEvents = useMemo(\r\n () => MsDyn365.isBrowser && window?.innerWidth <= desktopViewport && allowTouchMove,\r\n [allowTouchMove]\r\n );\r\n\r\n const nextSlideClickHandler = useCallback(() => {\r\n setIndex((prevIndex) => prevIndex + 1);\r\n setRealIndex((prevIndex) =>\r\n prevIndex === lastSlideIndex ? 0 : prevIndex + 1\r\n );\r\n }, [lastSlideIndex]);\r\n\r\n const pausePlay = () => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n };\r\n\r\n const stopPlay = () => {\r\n setPlay(false);\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n };\r\n\r\n const startPlay = useCallback(() => {\r\n if (intervalRef.current) {\r\n clearInterval(intervalRef.current);\r\n }\r\n\r\n intervalRef.current = setInterval(nextSlideClickHandler, autoplay.delay);\r\n setPlay(true);\r\n }, [autoplay.delay, nextSlideClickHandler]);\r\n\r\n useEffect(() => {\r\n const handleVisibilityChange = (event:any) => {\r\n if (event.target.hidden) {\r\n pausePlay();\r\n } else {\r\n if (play) {\r\n startPlay();\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener(\r\n 'visibilitychange',\r\n handleVisibilityChange\r\n );\r\n\r\n return () => {\r\n document.removeEventListener(\r\n 'visibilitychange',\r\n handleVisibilityChange\r\n );\r\n };\r\n }, [play, startPlay]);\r\n\r\n useEffect(() => {\r\n onSlideChange({ play, index: realIndex });\r\n }, [realIndex, onSlideChange, play]);\r\n\r\n useEffect(() => {\r\n if (!autoplay.enable || slideCount === 1) {\r\n return;\r\n }\r\n\r\n startPlay();\r\n\r\n return () => {\r\n stopPlay();\r\n };\r\n }, [autoplay.enable, startPlay, slideCount]);\r\n\r\n const prevSlideClickHandler = useCallback(() => {\r\n setIndex((prevIndex) => prevIndex - 1);\r\n setRealIndex((prevIndex) =>\r\n prevIndex === 0 ? lastSlideIndex : prevIndex - 1\r\n );\r\n }, [lastSlideIndex]);\r\n\r\n const slideChangeHandler = (virtualIndex:number) => {\r\n let paginationIndex;\r\n\r\n if (virtualIndex >= 0) {\r\n paginationIndex = virtualIndex % slideCount;\r\n } else {\r\n paginationIndex =\r\n (slideCount - Math.abs(virtualIndex % slideCount)) % slideCount;\r\n }\r\n\r\n setRealIndex(paginationIndex);\r\n setIndex(virtualIndex);\r\n };\r\n\r\n\r\n const mouseEnterHandler = () => {\r\n if (autoplay.pauseOnHover) {\r\n pausePlay();\r\n }\r\n };\r\n\r\n const mouseLeaveHandler = () => {\r\n if (autoplay.pauseOnHover && play) {\r\n startPlay();\r\n }\r\n };\r\n\r\n return {\r\n index,\r\n realIndex,\r\n slideCount,\r\n play,\r\n enableMouseEvents,\r\n nextSlideClickHandler,\r\n prevSlideClickHandler,\r\n slideChangeHandler,\r\n mouseEnterHandler,\r\n mouseLeaveHandler\r\n };\r\n};\r\n\r\nexport default useCarousel;\r\n","import { cloneElement, FC, Fragment, ReactElement, ReactNode } from 'react';\r\nimport SwipeableViews from 'react-swipeable-views';\r\nimport { virtualize } from 'react-swipeable-views-utils';\r\nimport { CarouselConfig } from './types';\r\nimport { mod } from './utils';\r\nimport React from 'react';\r\nimport useCarousel from './useCarousel';\r\n\r\ntype PropTypes = { children: ReactNode[] } & CarouselConfig;\r\n\r\nconst VirtualizeSwipeableViews = virtualize(SwipeableViews);\r\n\r\nconst Carousel: FC = (props) => {\r\n const {\r\n index,\r\n slideCount,\r\n enableMouseEvents,\r\n slideChangeHandler,\r\n mouseLeaveHandler,\r\n mouseEnterHandler\r\n } = useCarousel({ slides: props.children, ...props });\r\n const {\r\n children,\r\n classes = {}\r\n } = props;\r\n\r\n const slideRenderer = ({ index }:any) => {\r\n const child = children[mod(index, slideCount)] as ReactElement;\r\n if (!child) {\r\n return null;\r\n }\r\n return {cloneElement(child)};\r\n };\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Carousel;\r\n","export const mod = (index:number, count:number) => {\r\n const q = index % count;\r\n\r\n return q < 0 ? q + count : q;\r\n};\r\n","import React from 'react';\r\nimport { IPromoBannerConfig, IPromoBannerProps } from '../../themes/mattressfirm/definition-extensions/promo-banner.ext.props.autogenerated';\r\nimport { IMfrmHeaderData } from '../../modules/mfrm-header/mfrm-header.data';\r\nimport { bedhubToPencilBannerData, d365ToPencilBannerData } from './pencil-banner-adaptor/pencilBannerAdaptor';\r\nimport { isScheduled } from './util/is-scheduled';\r\nimport { PencilBannerMessage } from './pencil-banner-components/PencilBannerMessage';\r\nimport Carousel from '../components/Carousel';\r\n\r\nexport const MFRMPencilBanner = (props: IPromoBannerProps & IPromoBannerConfig) => {\r\n //D365 Data\r\n const mfrmPencilBannerData = props;\r\n const d365PencilBannerData = d365ToPencilBannerData(mfrmPencilBannerData);\r\n\r\n //Filter D365 data if scheduled and banner enabled\r\n d365PencilBannerData!.items = d365PencilBannerData!.items?.filter((item:\r\n { enableBanner: boolean | undefined, schedule: { end: string | undefined, start: string | undefined } }) => {\r\n return (item.enableBanner && isScheduled(item.schedule));\r\n });\r\n\r\n //BedHub Data\r\n let bedhubDataSource = props?.config?.bedhubDataSource;\r\n const {\r\n data: {\r\n bedhubHeader: { result: bedhubHeader }\r\n }\r\n } = props;\r\n\r\n if (bedhubHeader?.data?.ui === undefined) {\r\n bedhubDataSource = false;\r\n }\r\n\r\n const bedhubPencilBanner = bedhubHeader?.data?.ui?.pencilBanner;\r\n const bedhubPencilBannerData = bedhubToPencilBannerData(bedhubPencilBanner);\r\n\r\n //Filter BedHub data if scheduled and banner enabled\r\n if (bedhubDataSource) {\r\n bedhubPencilBannerData!.items = bedhubPencilBannerData!.items?.filter((item:\r\n { enableBanner: boolean | undefined, schedule: { end: string | undefined, start: string | undefined } }) => {\r\n return (item.enableBanner && isScheduled(item.schedule));\r\n });\r\n }\r\n\r\n const pencilBannerData:any = bedhubDataSource ? (bedhubPencilBannerData || []) : d365PencilBannerData;\r\n\r\n return (\r\n
\r\n \r\n {\r\n pencilBannerData?.items.map((slideInfo: any) => (\r\n \r\n ))\r\n }\r\n \r\n
\r\n );\r\n};\r\n","//!OLD PROMO BANNER CODE\r\n//TODO add logic for toggle\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport {\r\n IBannerScheduleData,\r\n ICountdownScheduleData,\r\n IPromoBannerProps\r\n} from '../definition-extensions/promo-banner.ext.props.autogenerated';\r\nimport { IMfrmHeaderData } from '../../../modules/mfrm-header/mfrm-header.data';\r\nimport { MFRMPencilBanner } from '../../../mfrm-components/mfrm-pencil-banner/MFRMPencilBanner';\r\n\r\n// countdown component\r\nimport Countdown, { CountdownRenderProps } from 'react-countdown';\r\n\r\n// used for date/time functionailty\r\nimport MsDyn365, { Link, ILinksData } 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\nconst format = 'M/D/YYYY H:m:s';\r\n\r\nimport { IPromoBannerViewProps } from '@msdyn365-commerce-modules/promo-banner';\r\n\r\n// tslint:disable-next-line: max-func-body-length\r\nconst PromoBannerView: React.FC & IPromoBannerViewProps> = props => {\r\n const {\r\n promoBannerProps,\r\n promoBannerLinksProps,\r\n closeButton,\r\n carouselProps,\r\n config: { mfrmBannerMessages, bannerLimit, enableOOBPencilBanner }\r\n } = props;\r\n\r\n // VSI Customization - START\r\n\r\n const scheduledSlides: JSX.Element[] = [];\r\n // counter for the banner limit\r\n const adjustedBannerLimit = bannerLimit !== undefined ? bannerLimit : (mfrmBannerMessages && mfrmBannerMessages.length) || 0;\r\n let bannerCount = 0;\r\n\r\n mfrmBannerMessages &&\r\n mfrmBannerMessages.forEach((message, index) => {\r\n const bannersUnderLimit = adjustedBannerLimit - bannerCount;\r\n const bannerSchedule = message.bannerSchedule;\r\n\r\n // banner only follows schedule if enableBannerSchedule config is set to true\r\n const bannerShouldShow = bannerSchedule && bannerSchedule.enableBannerSchedule ? isScheduled(bannerSchedule) : true;\r\n\r\n // checks if banner is set to be enabled, is currently scheduled, and the banner limit hasn't been surpassed\r\n if (message.enableBanner && bannersUnderLimit && bannerShouldShow) {\r\n const countdownSchedule = message.countdownSchedule;\r\n bannerCount++;\r\n\r\n // add countdown to richText if required\r\n const parsedRichText = message.richText && ReactHtmlParser(message.richText.toString());\r\n\r\n // add countdown component into richText\r\n countdownSchedule && parsedRichText && countdownSchedule.enableCountdown && setCountDown(countdownSchedule, parsedRichText);\r\n\r\n const editableLink: ILinksData = {\r\n ariaLabel: message.links![0].ariaLabel,\r\n className: 'ms-promo-banner__link',\r\n linkText: message.links![0].linkText,\r\n openInNewTab: message.links![0].openInNewTab,\r\n role: 'link',\r\n linkUrl: message.links![0].linkUrl.destinationUrl\r\n };\r\n\r\n const promoBannerParentDivRef = React.useRef();\r\n React.useEffect(() => {\r\n promoBannerParentDivRef.current &&\r\n promoBannerParentDivRef.current.addEventListener('click', function (event: React.MouseEvent) {\r\n event.preventDefault();\r\n if ('utag' in window) {\r\n const eventLabel = `${htmltoText(message.richText?.toString()!).trim()}`;\r\n // @ts-ignore\r\n utag.link({\r\n event: 'pencil banner tracking',\r\n event_category: 'pencil banner tracking',\r\n event_action: 'pencil banner click',\r\n event_label: eventLabel,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n if (MsDyn365.isBrowser) {\r\n window.location.href = message.links![0].linkUrl.destinationUrl;\r\n }\r\n });\r\n }, []);\r\n\r\n scheduledSlides.push(\r\n \r\n \r\n {message.richText &&
{parsedRichText}
}\r\n {message.links && message.links.length > 0 && }\r\n
\r\n
\r\n );\r\n }\r\n });\r\n\r\n // override the _next() and _prev() functions from promo-banner.tsx to only count scheduled slides instead of all slides when determining first and last slides\r\n carouselProps.next = (): void => {\r\n const isLastItem = props.activeIndex === scheduledSlides.length - 1;\r\n const nextIndex = isLastItem ? 0 : props.activeIndex + 1;\r\n // sets the index for the next button. equivalent to _goToIndex() from promo-banner.tsx\r\n carouselProps.onIndicatorsClickHandler(nextIndex);\r\n };\r\n\r\n carouselProps.previous = (): void => {\r\n const isFirstItem = props.activeIndex === 0;\r\n const nextIndex = isFirstItem ? (mfrmBannerMessages ? scheduledSlides.length - 1 : 0) : props.activeIndex - 1;\r\n carouselProps.onIndicatorsClickHandler(nextIndex);\r\n };\r\n if (enableOOBPencilBanner) {\r\n return (\r\n \r\n } data-testid='BannerScrollArrow' />\r\n {closeButton}\r\n \r\n );\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\n// strips content inside given element\r\nconst clearContent = (parsedRichText: React.ReactElement[]): void => {\r\n // find countdown element and clear its content\r\n for (let i = 0; i < parsedRichText.length; i++) {\r\n const element = parsedRichText[i];\r\n const classNames = element.props.className && element.props.className.split(' ');\r\n if (classNames && classNames.includes('countdown')) {\r\n element.props.children.length = 0;\r\n return;\r\n }\r\n }\r\n};\r\n\r\n// adds Countdown component as a child of the element with the id 'countdown' is countdown should show\r\nconst setCountDown = (countdownSchedule: ICountdownScheduleData, parsedRichText: React.ReactElement[]): void => {\r\n // check if countdown is scheduled to show\r\n if (!isScheduled(countdownSchedule)) {\r\n return;\r\n }\r\n\r\n // clear content inside 'countdown' element\r\n clearContent(parsedRichText);\r\n\r\n const endDate = countdownSchedule.endDate;\r\n const endTime = countdownSchedule.endTime;\r\n const scheduleEnd = dayjs(`${endDate} ${endTime}`, format);\r\n const scheduleEndLocal = scheduleEnd && convertToLocal(scheduleEnd, countdownSchedule);\r\n\r\n const renderer = ({ formatted }: CountdownRenderProps) => {\r\n return (\r\n \r\n {formatted.hours}:{formatted.minutes}:\r\n {formatted.seconds}\r\n \r\n );\r\n };\r\n\r\n const countdown = scheduleEndLocal && ;\r\n\r\n // find target and put countdown inside of it\r\n parsedRichText.forEach(element => {\r\n const classNames = element.props.className && element.props.className.split(' ');\r\n if (classNames && classNames.includes('countdown')) {\r\n element.props.children.push(countdown);\r\n return;\r\n }\r\n });\r\n};\r\n\r\n// checks if countdown/banner is currently scheduled\r\nconst isScheduled = (schedule: ICountdownScheduleData | IBannerScheduleData): Boolean => {\r\n let start = schedule.startDate && schedule.startTime && dayjs(`${schedule.startDate} ${schedule.startTime}`, format);\r\n let end = schedule.endDate && schedule.endTime && dayjs(`${schedule.endDate} ${schedule.endTime}`, format);\r\n\r\n // check if schedule is valid\r\n const validStart = start && start.isValid();\r\n const validEnd = end && end.isValid();\r\n\r\n if (!validStart || !validEnd) {\r\n return false;\r\n }\r\n\r\n const now = dayjs();\r\n\r\n // convert to local time\r\n start = start && convertToLocal(start, schedule);\r\n end = end && convertToLocal(end, schedule);\r\n\r\n return now.isBetween(start, end);\r\n};\r\n\r\n// convert time to local time\r\nconst convertToLocal = (time: dayjs.Dayjs, schedule: ICountdownScheduleData | IBannerScheduleData): dayjs.Dayjs | undefined => {\r\n const timeZone = schedule.timeZone && getTimeZone(schedule.timeZone);\r\n\r\n return !timeZone\r\n ? time\r\n : dayjs(time.format(format), format)\r\n .tz(timeZone)\r\n .local();\r\n};\r\n\r\n// convert timezone choice to matching timezone in moment-timezone\r\nconst getTimeZone = (timeZone: string): string | undefined => {\r\n switch (timeZone) {\r\n case 'hawaii':\r\n return 'America/Adak';\r\n case 'alaska':\r\n return 'America/Anchorage';\r\n case 'pacific':\r\n return 'America/Los_Angeles';\r\n case 'mountain':\r\n return 'America/Denver';\r\n case 'central':\r\n return 'America/Chicago';\r\n case 'eastern':\r\n return 'America/New_York';\r\n default:\r\n return undefined;\r\n }\r\n};\r\n\r\nconst htmltoText = (html: string) => {\r\n if (MsDyn365.isBrowser) {\r\n // Create a new div element\r\n const tempDivElement = document.createElement('div');\r\n\r\n // Set the HTML content with the given value\r\n // tslint:disable-next-line: no-inner-html\r\n tempDivElement.innerHTML = html;\r\n\r\n // Retrieve the text property of the element\r\n return tempDivElement.textContent || tempDivElement.innerText || '';\r\n } else {\r\n return '';\r\n }\r\n};\r\n\r\n// VSI Customization - END\r\n\r\nexport default PromoBannerView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['promo-banner'] = {\n c: () => require('@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'promo-banner',\n p: 'promo-banner',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner'\n });\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|mattressfirm|views|promo-banner'] = {\n c: () => require('partner/themes/mattressfirm/views/promo-banner.view.tsx'),\n cn: '__local__-__local__-promo-banner'\n };\nviewDictionary['@msdyn365-commerce-modules|promo-banner|modules|promo-banner|promo-banner'] = {\n c: () => require('@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner.view.js'),\n cn: '@msdyn365-commerce-modules-promo-banner-promo-banner'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoBannerCloseButton {\n closeButtonAriaLabel?: string;\n label?: string;\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../promo-banner.props.autogenerated';\n\nexport interface IPromoBannerLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-promo-banner__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nexport interface IPromoBannerText {\n text: string;\n requestContext: Msdyn365.IRequestContext;\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\n return ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\nimport { IBannerMessagesData, IPromoBannerProps, IPromoBannerResources } from './promo-banner.props.autogenerated';\n\nexport interface IPromoBannerState {\n animating: boolean;\n isVisible: boolean;\n activeIndex: number;\n}\n\nexport interface IPromoBannerViewProps extends IPromoBannerProps<{}>, IPromoBannerState {\n promoBannerProps: IModuleProps;\n contentProps: INodeProps;\n bannerMessages: IBannerMessagesData[];\n promoBannerTextProps: INodeProps;\n promoBannerLinksProps: INodeProps;\n carouselProps: INodeProps;\n closeButton?: React.ReactNode;\n className: string;\n promoBannerText: string;\n resources: IPromoBannerResources;\n onDismiss(): void;\n handleText(): void;\n handleLinks(): void;\n}\n\n/**\n *\n * PromoBannerModule component.\n * @extends {React.PureComponent>}\n */\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\n public state: IPromoBannerState = {\n animating: false,\n isVisible: true,\n activeIndex: 0\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className = '' } = this.props.config;\n const { closeButtonAriaLabel, closeButtonLabel, bannerText, bannerAriaLabel } = this.props.resources;\n const { isVisible, activeIndex } = this.state;\n\n if (!isVisible) {\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\n return null;\n }\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: classnames('ms-promo-banner', className),\n isVisible, // State data\n onDismiss: this._onDismiss, // Methods\n handleLinks: this.handleLinkTextChange,\n handleText: this.handleTextChange,\n\n promoBannerProps: {\n className: classnames('ms-promo-banner', className),\n moduleProps: this.props,\n role: 'banner',\n 'aria-label': bannerAriaLabel\n },\n promoBannerTextProps: {\n tag: PromoBannerText\n },\n promoBannerLinksProps: {\n tag: PromoBannerLinks,\n telemetryContent: this.telemetryContent\n },\n contentProps: { className: 'ms-promo-banner__content' },\n promoBannerText: bannerText,\n bannerMessages,\n activeIndex,\n carouselProps: {\n tag: Carousel,\n className: 'ms-promo-banner__carousel',\n activeIndex,\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n hideIndicator: hideFlipper,\n interval,\n hideFlipper,\n autoplay\n },\n closeButton: dismissEnabled && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\n this.props.config.bannerMessages[0].text = event.target.value;\n }\n };\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\n const links = this.props.config.bannerMessages[1].links;\n if (links) {\n links[linkIndex].linkText = event.target.value;\n }\n }\n };\n\n private readonly _next = (): void => {\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _previous = (): void => {\n const nextIndex = this._isFirstItem()\n ? this.props.config.bannerMessages\n ? this.props.config.bannerMessages.length - 1\n : 0\n : this.state.activeIndex - 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _goToIndex = (index: number): void => {\n if (this.state.animating) {\n return;\n }\n this.setState({ activeIndex: index });\n };\n\n private readonly _isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly _isLastItem = () =>\n this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\n\n private readonly _onDismiss = (): void => {\n this.setState({ isVisible: false });\n };\n}\n\nexport default PromoBanner;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IPromoBannerViewProps } from './promo-banner';\n\nconst PromoBannerView: React.FC = props => {\n const {\n promoBannerProps,\n contentProps,\n closeButton,\n bannerMessages,\n promoBannerTextProps,\n promoBannerLinksProps,\n carouselProps,\n promoBannerText,\n handleLinks,\n handleText\n } = props;\n\n const slides =\n bannerMessages &&\n bannerMessages.map((message, index) => {\n return (\n \n {promoBannerText}\n {message.text && }\n {message.links && message.links.length > 0 && (\n \n )}\n \n );\n });\n\n return (\n \n \n {closeButton}\n \n );\n};\nexport default PromoBannerView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["CustomerInfoDataTestIds","CheckoutStepperDataTestIds","SynchronyFinnacinTestIds","learnhow","radio","PaymentSteppDataTestIds","CheckoutButtonDataTestIds","DeliveryDataTestIds","OrderSummaryCheckoutDataTestIds","CartDataTestIds","PaypalExpressDataTestIds","OrderConfirmationDataTestIds","UILinkType","isScheduled","schedule","start","end","format","splitStartSchedule","split","startDate","startTime","dayjs","splitEndSchedule","endDate","endTime","validStart","isValid","validEnd","isBetween","PencilBannerCountDown","props","countdownData","scheduleEnd","React","Countdown","date","toDate","renderer","formatted","days","className","hours","minutes","seconds","htmltoText","html","tempDivElement","document","createElement","innerHTML","textContent","innerText","PencilBannerHTML","bannerHTML","url","href","onClick","event","preventDefault","window","utag","link","event_category","event_action","event_label","trim","event_noninteraction","location","tabIndex","dangerouslySetInnerHTML","__html","PencilBannerCTA","ctaText","bannerHtml","PencilBannerMessage","slideInfo","messageRef","useRef","ariaHiddenNode","current","parentNode","anchorRef","currentNode","isMessageHidden","getAttribute","setAttribute","ref","onKeyDown","key","countdown","label","slides","allowTouchMove","autoplay","onSlideChange","index","setIndex","useState","realIndex","setRealIndex","play","setPlay","intervalRef","lastSlideIndex","slideCount","useMemo","length","enableMouseEvents","MsDyn365","innerWidth","nextSlideClickHandler","useCallback","prevIndex","pausePlay","clearInterval","startPlay","setInterval","delay","useEffect","handleVisibilityChange","target","hidden","addEventListener","removeEventListener","enable","prevSlideClickHandler","slideChangeHandler","virtualIndex","paginationIndex","Math","abs","mouseEnterHandler","pauseOnHover","mouseLeaveHandler","VirtualizeSwipeableViews","virtualize","SwipeableViews","useCarousel","children","classes","carousel","onMouseEnter","onMouseLeave","animateTransitions","onChangeIndex","slideRenderer","child","count","q","mod","Fragment","cloneElement","overscanSlideAfter","overscanSlideBefore","springConfig","duration","easeFunction","MFRMPencilBanner","d365PencilBannerData","mfrmPencilBanner","interval","config","items","mfrmBannerMessages","map","item","enableBanner","ariaLabel","name","countdownSchedule","enableCountdown","undefined","richText","links","linkText","bannerSchedule","enableBannerSchedule","linkUrl","destinationUrl","next","altText","image","src","previous","filter","bedhubDataSource","data","bedhubHeader","result","ui","bedhubPencilBanner","pencilBanner","bedhubPencilBannerData","bedhubData","type","pencilBannerData","Carousel","tz","utc","setCountDown","parsedRichText","i","element","classNames","includes","clearContent","scheduleEndLocal","convertToLocal","daysInHours","forEach","push","now","time","timeZone","getTimeZone","local","promoBannerProps","promoBannerLinksProps","closeButton","carouselProps","bannerLimit","enableOOBPencilBanner","scheduledSlides","adjustedBannerLimit","bannerCount","message","bannersUnderLimit","bannerShouldShow","ReactHtmlParser","toString","editableLink","openInNewTab","role","promoBannerParentDivRef","eventLabel","Node","Link","nextIndex","activeIndex","onIndicatorsClickHandler","Module","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","PromoBannerCloseButton","closeButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","TelemetryConstant","attributes","getTelemetryAttributes","PromoBannerLinks","requestContext","onTextChange","editableLinks","_mapEditableLinks","Msdyn365","editProps","linkdata","contentAction","etext","additionalProperties","onTelemetryClick","PromoBannerText","text","tag","onEdit","PromoBanner","constructor","state","animating","isVisible","getTelemetryObject","this","context","request","telemetryPageName","friendlyName","telemetry","handleTextChange","bannerMessages","value","handleLinkTextChange","linkIndex","_next","_isLastItem","_goToIndex","_previous","_isFirstItem","setState","_onDismiss","render","dismissEnabled","hideFlipper","closeButtonLabel","bannerText","bannerAriaLabel","resources","error","viewProps","classnames","onDismiss","handleLinks","handleText","moduleProps","promoBannerTextProps","contentProps","promoBannerText","hideIndicator","renderView","module","exports","ReactDOM"],"sourceRoot":""}