{"version":3,"sources":["webpack:///./guest-payment-components/DonateGiftAidHowItWorksOverlay.js","webpack:///./guest-payment-components/DonateGiftAid.js","webpack:///./components/amount/amountValidationError.js","webpack:///./components/amount/calculator.js","webpack:///./components/amount/PresetAmountRow.js","webpack:///./components/amountWrapper.js","webpack:///./react-card-security-code/index.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/lodash/throttle.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/lodash/now.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/react-portal/es/utils.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/react-portal/es/Portal.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/react-portal/es/LegacyPortal.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/react-portal/es/PortalCompat.js","webpack:///./components/threeDS/ThreeDSSpinner.js","webpack:///./components/threeDS/ThreeDSDeviceDataCollection.js","webpack:///./components/threeDS/ThreeDSIframe.js","webpack:///./components/threeDS/ThreeDSContainer.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/lodash/debounce.js","webpack:///./components/guest/WithDonate.js","webpack:///./utility/card-utils.js","webpack:///./components/NoteFieldError.js","webpack:///./components/note.js","webpack:///./components/anonymousDonation/anonymousCheckbox.js","webpack:///./utility/bootstrap.js","webpack:///./components/nextButton.js","webpack:///./components/landing/OneTouchNextButton.js","webpack:///./components/guestButton.js","webpack:///./components/recurring-checkbox/RecurringInfo.js","webpack:///./components/recurring-checkbox/recurring-checkbox.js","webpack:///./utility/fixPpReactToolTip.js","webpack:///./components/programs/Programs.js","webpack:///./components/recurring-checkbox/RecurringOverlay.js","webpack:///./components/NotTaxDeductibleLegalText.js","webpack:///./components/coverFee/coverFeeCheckbox.js","webpack:///./pages/landing/landing.js","webpack:///./components/WhosDonatedBanner.js","webpack:///./components/Flyout.js","webpack:///./components/hooks/useInterval.js","webpack:///./utility/donorWall.js","webpack:///./pages/landing/campaignLanding.js","webpack:///./setup/clientConstants.js","webpack:///./containers/cvv-component.js","webpack:///./pages/guest/guestReviewComponents/PaymentInformation.js","webpack:///./components/currencyConversion/CurrencyConversionModal.js","webpack:///./utility/accessibilityUtils.js","webpack:///./pages/guest/guestReviewComponents/CrossBorder.js","webpack:///./pages/guest/guestReviewComponents/FeePricing.js","webpack:///./pages/guest/GuestReview.js","webpack:///./pages/guest/confirmation.js","webpack:///./pages/error/FullPageError.js","webpack:///./pages/error/paymentError.js","webpack:///./pages/error/UnilateralError.js","webpack:///./pages/error/threeDSError.js","webpack:///./components/CaptureOrder.js","webpack:///./components/CancelAndRedirectOrder.js","webpack:///./routes/router.js","webpack:///./utility/lazyLoader.js","webpack:////home/jenkins/agent/workspace/donate-gro-release_2/node_modules/prop-validators/dist/index.js"],"names":["styles","StyleSheet","create","modalContent","maxWidth","margin","okButton","marginTop","msgMargin","DonateGiftAidHowItWorksOverlay","props","content","className","overpanel","title","isOpen","onClose","closeOverlay","hideLogo","closeOnBackgroundClick","id","css","size","howitworks","modalp1","modalp2","modalp3","modalp4","onClick","ok","propTypes","PropTypes","object","bool","func","DonateGiftAid","isAlreadyEnrolled","isChecked","handleGiftAidOption","contentMsg","addressData","showAddress","useState","showHelp","setShowHelp","checked","setChecked","isHowItWorksOverlayOpen","setIsHowItWorksOverlayOpen","useEffect","openHowItWorksOverlay","src","appendCdnHostName","alt","extraCost","type","tertiary","learnMore","alreadyDone","label","optGiftaid","name","onChange","env","checkedValue","target","applyGiftAid","strong","taxpayer","fullName","address1","address2","city","state","zip","confirmNote","openOverlay","any","isMember","STYLES","error","color","grey700","fontSize","criticalIcon","position","marginRight","AmountValidationError","this","errorSourceField","errorString","errorCode","trackErrorIM","errorMessage","fieldName","style","role","data-testid","Component","string","donationAmount","messages","localsMessages","container","padding","zIndex","calcRow","display","width","verticalAlign","calcRowLeft","calcRowRight","calcLabel","inputCol","input","outlineOffset","paddingLeft","inputLeft","paddingRight","inputRight","fromCode","right","top","height","borderTop","borderRight","borderBottom","toCode","lineHeight","conversion","textAlign","paddingTop","disabled","opacity","inputCurrencyLeft","marginLeft","hasError","Calculator","symbol","currencySymbols","setState","fromSymbol","length","document","getElementById","ev","callback","val","value","match","validateAmount","handleFromChange","handleToChange","handleFromCurrencyChange","setFromSymbol","event","handleAmountFocus","amount","replace","decimalPoint","youDonate","charityGet","youDonateLabel","charityGetLabel","conversionLabel","placeholder","getLocalizedAmount","fromAmount","toAmount","conversionRate","calcLabelStyle","toError","fromDisabled","bind","onFocus","availableCurrencies","map","c","key","toDisabled","charityAmountSymbol","toErrorMessage","React","array","isRequired","presetOther","placeholderOtherAmount","PresetAmountRow","templateData","presetAmounts","setPresetAmounts","AppStore","getDonationAmountType","getDonationAmount","selectedOption","setSelectedOption","showOtherAmount","setShowOtherAmount","handlePresetAmountClick","handleAmountChange","hideValidationError","AppActions","amountBeforeFee","getAmountBeforeFee","isOptInCoverFee","shouldSelectPresetAmount","values","charityAmountCode","rightSymbol","result","amountFieldValue","charityAmount","presetOptions","getCurrencyParts","$","formatAmountFromServerDNW","noDecimals","secondaryLabel","isAmountEditable","showValidationError","validationErrorMessage","checkValue","parseFloat","trackLinkClick","LINK_NAME","PRESET_AMOUNT","additionalData","FPTI_TAGS","SELECTED_PRESET_BUTTON_ID","griffin","getGriffin","clientMetadata","__getInitialData","coverFeeOptInStatus","getCoverFeeOptInStatus","isPreview","validationErrorCode","amountLabel","AmountWrapper","dispatcherCharityAmount","AppDispatcher","register","payload","action","actionType","item","addFeature","FEATURES","DONATION_AMOUNT_EDITABLE","unregister","window","location","pathname","includes","undefined","getParameterByName","isNaN","exchangeRate","base_currency_code","userAmountCode","quote_amount","toFixed","params","getConversionRequest","_debounce","st","par","fn","queryParams","fromCountry","userCountry","fromCurrency","toCurrency","normalizeAmount","conversionStatus","Promise","resolve","fetcher","method","body","JSON","stringify","then","response","json","catch","source","exchange_rate","isCalculator","setAppAmount","isAtLandingPage","setFeeAmountInStore","updateFeeAmount","optOutCoverFee","snapshot","userAmount","charityDisabled","getConversion","getConversionRate","currencyCode","userDisabled","presetAmountsCondition","TemplateData","enablePresetAmounts","isGuestReviewPage","PRESET","validateDonationAmount","selectedRecurringFrequency","getContent","parse","innerHTML","currencyLists","currencies","symbols","donorIpCountry","US","getDonationCode","isEditable","donationAmountEditable","getDonationSymbol","donationDecimalPoint","nextProps","shouldShowPresetAmounts","renderPresetAmounts","handleUserAmountChange","handleUserCurrencyChange","handleCharityAmountChange","getAmountPlaceHolder","handleAmount","handleTrackError","addShake","getDonationRecurring","getRecurringLabel","CardSecurityCode","showIsRequiredError","securityCode","handleCheckForValue","handleChangeSecurityCode","cardSpec","fields","csc","required","handleFocus","handleBlur","cscSpecs","maxLength","maxlength","pattern","onBlur","errorText","dir","helperText","cardSpecPropType","debounce","isObject","module","exports","wait","options","leading","trailing","TypeError","root","Date","now","canUseDOM","createElement","_createClass","defineProperties","i","descriptor","enumerable","configurable","writable","Object","defineProperty","Constructor","protoProps","staticProps","prototype","_classCallCheck","instance","_possibleConstructorReturn","self","call","ReferenceError","_React$Component","Portal","__proto__","getPrototypeOf","apply","arguments","subClass","superClass","constructor","setPrototypeOf","_inherits","defaultNode","removeChild","node","appendChild","createPortal","children","renderPortal","unmountComponentAtNode","portal","cloneElement","unstable_renderSubtreeIntoContainer","LegacyPortal","threeDSText","LOADING_GIF_SOURCE","spinnerAlign","cardImg","wontTakeLong","DoNotCloseOrRefresh","ThreeDSSpinner","fundingOptions","getFundingOptions","_get","network","getPaymentCardNetwork","myData","getAllData","_isEmpty","cardType","toLowerCase","hideSpinnerOverlay","setNetworkDetails","confirmingWith","RegExp","withTheme","ThreeDSDeviceDataCollection","data","exception","messageType","onDDCComplete","trackThreeDsDdcFailure","STATUS","console","log","onThreeDSDDCComplete","contingencies","_find","addEventListener","handleDDCEvent","threeDS2ReferenceId","getThreeDSParams","three_ds_reference_id","refs","submit","e","removeEventListener","deviceDataCollectionUrl","device_data_collection_url","jwt","ref","withRouter","ThreeDSIframe","handleIframeMessage","confirmationStatus","CHALLENGE_STATUS","trackThreeDSIframeIM","threeDSRespDuration","CHALLENGE_END_TIME","getTime","onStepUpAuthComplete","hideModal","element","formRef","setTimeout","threeDS2Contingency","getThreeDSContingency","redirectLink","md","redirectMethod","requestText","frameBorder","setFormRef","submitForm","CHALLENGE_START_TIME","hideTitle","getModalBody","icon","ThreeDSContainer","showThreeDSDeviceDataCollection","threeDSDCCEndTime","fptiData","THREE_DS_DCC_START_TIME","threeDSDCCStartTime","THREE_DS_DCC_END_TIME","THREE_DS_SPINNER_START_TIME","THREE_DS_SPINNER_END_TIME","trackThreeDsDdcComplete","resolveThreeDSContingency","trackThreeDsLookupStart","THREE_DS_LOOKUP_START_TIME","token","onboardingEnabled","hideThreeDSSpinner","threeDSContingency","resolved","trackThreeDsLookupComplete","timestamp","THREE_DS_LOOKUP_END_TIME","CONTINGENCY_RESOLVED","URL","ACTION","onThreeDSStepUpAuthNotRequired","showThreeDSIframe","hideThreeDSIframe","onThreeDSFailure","onThreeDSStepUpAuthSuccess","onThreeDSStepUpAuthFailure","showThreeDSSpinner","onRef","startTime","trackThreeDsDdcStart","handleThreeDSDDCComplete","handleThreeDSStepUpAuthComplete","toggleSpinner","toNumber","nativeMax","Math","max","nativeMin","min","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","initialData","getInitialData","serviceErrorMessages","ERROR_ELEMENT_SELECTOR","join","withDonate","WrappedComponent","country","DonateAppActions","CHANGE_COUNTRY","COUNTRY","signUp","url","handleGuestCountryChange","isSpinner","showSpinnerOverlay","scrollElementIntoView","language","note","getDonationNote","fundingOptionId","email","getEmail","billingAddress","getBillingAddress","giftAidItFlag","getGiftaidItFlagStatus","card","getSelectedRecurringFrequency","code","history","push","status","href","clientState","encodeURIComponent","confirmationData","startCustomCPLTrackingForConfirmationPage","objectOrArrayToQueryString","confirmation","isOfacPending","isEmpty","cartUrl","orderToken","donateToken","payerID","selectedCountry","getFormData","formData","getParametersFromUrl","showErrorOnLoad","errorMsgs","serverErrors","handleCountryChange","handleScrollToError","getDonateGuestUrl","getInitialFormData","saveFormData","doFulfilment","captureOrder","createOrder","fundingTypes","defaultCardSpec","ccNumber","expirationDate","minlength","getSpecificCardSpec","cardNumber","cardTypes","autodetect","test","PAYMENT_CARDS","NoteFieldError","NoteComponent","lengthLimit","campaigns","campaignsLabel","providedLabel","isCampaigns","charityNoteEnabled","charityNoteLabel","donationNote","setDonationNote","initialNoteLabel","showLabel","setShowLabel","showError","setShowError","noteLabel","setNoteLabel","textAreaEl","useRef","isNoteTextPresent","current","focus","isNotePreview","directionality","contextLocalityDir","isExternalFlow","htmlFor","NOTE_PAD","eventName","EVENT_NAME","DW_GIVING_DONATE_SETUP_COMMENT_PRESSED","iconName","buttonType","aria-hidden","maxRows","minRows","showCharacterCounter","maxCharacters","addClass","removeClass","trim","AnonymousCheckbox","optInStatus","handleAnonymousDonationChange","ANONYMOUS","tooltip","checkboxStatus","anonymousStatus","labelIcon","description","onOpen","ANONYMOUS_TOOLTIP","DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED","getElementsByTagName","setAttribute","NextButtonComponent","buttonnext","button","next","handleNext","branded","iconComponent","OneTouchNextButton","GuestButton","GUEST","debitorcredit","secondary","handleGuest","getRecurringInfoContent","RecurringInfo","orgName","useHTML","orgname","donationName","isLTR","isLeftToRight","texts","isContinue","wrapper","centered","justifyContent","toolWrapper","paddingBottom","animationWrapper","animationContainer","transform","recurringButton","borderRadius","marginBottom","borderOnly","background","divider","dividerContent","backgroundColor","verticalCentered","alignItems","RecurringCheckBox","tooltipButton","dispatcherToken","updateAmount","getElementsByClassName","btn","RECURRING","continue","currency","formatedAmount","formatAmount","showhelp","chkBxStatus","loadAnimation","recurring","RECURRING_CHECKBOX","CHECKBOX","handleChange","__html","loadBodyMovin","isAnimating","animationData","heartsAnimationData","bodymovinLibrary","bodymovin","renderer","loop","autoplay","destroy","rp","recurringLabel","recurring_label","perMonth","sanitizeOrgName","defaultProps","Programs","programNames","isDisabled","selectedIdx","handleSelect","Array","isArray","getProgramOptions","forEach","programName","primaryText","programOption","findIndex","program","appStore","getSelectedProgram","programs","optional","selectedItemIndex","onSelection","index","selectedProgram","PROGRAM_SELECTED","CAMPAIGN","RecurringOverlay","closeRecurringOverlay","onMakeOneTimeDonation","onContinue","signupHeader","dialogp1","dialogp2","dialogp3","dialogp2Week","dialogp2Year","continueBtn","noThanksBtn","secondDialog","center","isInContext","BackButton","handleClose","noCloseButton","containerClassName","noThanks_closeModal","disclaimerWrapper","border","disclaimer","disclaimerCaptionText","NotTaxDeductibleLegalText","dispatcherMessages","isPPCC","setIsPPCC","AppConstants","landing","mayNotBeTaxDeductible","CoverFeeCheckbox","handleCoverFeeChange","formatedFeeAmount","CTF","checkbox_content","coverFee","errorMessages","getCampaignContent","getRecurringFrequencyContent","LandingPageComponent","onload","cpl","CPL_PAGE_SPEC","LANDING_PAGE","currentPage","paymentStatus","recurringStatus","restoreDonationAmount","trackLandingPageIM","noteFieldDisplayed","shouldShowNote","recurringEnabled","waitForOnload","isLoggedInUser","registerAppDispatcherMessages","amountUtils","trackDonateWithCardClick","is_recurring","fee_type","coverFeeEnabled","preventDefault","recurringModalStatus","memberMandatory","openRecurringOverlay","validateAmountAndNavigateToGuestPage","PAYPAL","analytics","startCPLTracking","page","uicomp","uitype","trackDonateWithPayPalClick","handleLogIn","trackNextClickForCheckout","orderParams","prepareOrderParams","feeAmount","getFeeAmount","computeAmountAfterFee","updateDonationAmount","validationResult","donateDisabled","rpContinue","anonymousOptInStatus","trackAnonymousCheckboxClick","trackCoverFeeCheckboxClick","getFormatedFeeAmount","isRecurringOverlayOpen","isOldButtonFactory","supportedRecurringFrequencies","selectedTabIdx","rpContentHelper","totalAmount","normalizeNumber","formattedTotalAmount","donationCode","subHeaderLabel","isCheckoutRail","handleNextForCheckout","isAuthenticated","showNoteCondition","CHARITY_NOTE","personalizedMessages","getPersonalizedMessages","GN_CONTENT_TOUCHPOINT","amountRaised","campaignTotalAmountRaised","campaignStatus","campaignTargetAmount","campaignEndTime","tabIdx","handleRecurringChange","trackRecurringFrequencySelectionClick","anonymousStatusInStore","getAnonymousStatus","hasLogo","charityName","donationId","guestRedirectUrl","recurringHelpText","isAuthenticatedUser","donateContext","program_names","isVoucherFlow","offerProgram","feePayer","anonymousEnabled","hasDisclaimer","hasPersonalizedMessages","classNames","gn_donate_wrapper","bannerUrl","donate_wrapper","context_gn_wrapper","shouldShowUserBanner","mobile_view","isMobileOrInContext","showUserBanner","showSupportText","shouldShowSupportText","showNoDonationText","shouldShowNoDonationText","freq","receiverCountryEligible","landingClass","UserDetailsBanner","userDetails","CloseButton","inverse","DonateHeader","isLanding","tabs","option","panelId","selectFrequencyTab","tabId","updateConversionSataus","renderProgramsDropdown","getPersonalizedAnonymousContent","getPersonalizedNoteToPayeeLabel","showNote","selectedTab","success","renderDisclaimer","renderDonateButtons","hasPartnerSource","handleRecurringOverlayContinue","handleRecurringOverlayMakeOneTimeDonation","Disclaimer","getPersonalizedContent","organizationName","returnUrl","charityReturnUrl","LandingPage","Landing","displayLanding","currentState","business","hostedButtonId","campaignId","search","handleTokenReuse","addTokenToUrlIfMissing","WhosDonatedBanner","numberOfContributors","contributionsList","isLoading","donorName","donor_name","donatedAmount","donor","donorOneName","donorTwoName","slice","showAnonymousAvatar","shareDonorInfo","photo","photos","isAnonymousAvatar","number","getFlyoutContent","Flyout","delay","intervalRef","savedCallback","startShowing","setStartShowing","showFlyouts","setShowFlyouts","randomContribution","setRandomContribution","getRandomContribution","floor","random","flyoutTimer","setInterval","clearInterval","hideInterval","formatNumber","currency_code","formatFeatured","contributions","totalContributions","formattedList","first","find","badge","toUpperCase","selfItem","LandingDonorWall","reactLazy","LandingRichTextDisplay","getSocialContent","campaignsText","isPaymentCardOpen","setIsPaymentCardOpen","targetAmount","campaignTotalNumberOfTxn","amountRaisedWithCurrencySymbol","roundUpAndFormatCurrency","featured","list","setContributionsList","contributionsError","setContributionsError","setCurrentPage","setIsLoading","retry","setRetry","enableReadMore","setEnableReadMore","descriptionHeight","setDescriptionHeight","originalDescriptionHeight","setOriginalDescriptionHeight","stickToTop","isMobile","setIsMobile","checkDeviceType","innerWidth","throttle","fetchData","a","productId","handleShowMore","goalAmtWithCurrencySymbol","campaignGoalTitle","goalAmount","renderEndDateBadge","endTime","getBadgeContent","currentTime","formatDate","parseDateOnly","renderTitle","campaignTitle","renderGoalProgressMeter","round","steps","headerClasses","sticky","renderDonorWall","endDate","totalNumberOfTransactions","setHours","renderContributionsError","stickyHeader","social_title","incrementDescription","incrementedHeight","Header","Content","maxHeight","descriptionContainer","clientHeight","fallback","campaignDescription","social","shareGeneric","ConfirmationSocialShare","donationEmail","lg","trackDonateLandingButtonClick","mobileFixedHeight","wrapperClassName","skipFormFocus","guestMessages","guestLocalsMessages","CVVComponent","getCardSpec","errorMessageCSC","handleSecurityCodeChange","fieldRequired","fieldInvalid","newErrorState","validateInputValue","cscLen","cscMax","guestLabels","cscplaceholder","cscLabel","cscnote","handleFieldFocus","handleFieldBlur","PaymentInformation","paymentDigits","paymentType","issuer","isPaypalCurrencyConversion","funds","crossBorderContent","paymentInformation","preferred","paymentLogo","setPaymentLogo","transformText","str","charAt","payment_card","thumbnail_logo_url","CDN_HOST_NAME","split","CurrencyConversionOption","isSelected","aria-checked","tabIndex","handleOptionSelection","onKeyDown","doFunction","which","KEY_DOWN","SPACE","ENTER","checkKeyPressed","spotImage","rate","as","CurrencyConversionModal","CURRENCY_CONVERSION_OPTIONS","isPayPalSelected","setPaypalSelected","modalTitle","modalSubTitle","withPaypal","withPayPal","message","withCard","ISSUER","modalButton","crossborderContent","CrossBorder","fundingSources","lastFundingSource","tags","currencyConversionOption","getLocalizedCurrency","stateCurrency","hasFees","inCurrency","exchangeRateDecimalPoints","amountDecimalPoint","inSymbol","outCurrency","currencyConversionOpen","setCurrencyConversionOpen","CURRENCY_CONVERSION","pageSpec","PAGE_SPEC","CROSS_BORDER_PAGE","sources","_includes","getUserCountry","finally","handleCurrencyConversionClick","pricingContent","FeePricing","feeAmounts","openHelperSheet","setOpenHelperSheet","paymentAmount","payment_amount","totalFee","total_fee","totalAmountPaid","total_amount_paid","svgIconComponent","giftAidText","donateGiftPercentage","getGiftAidItExtraAmount","giftAidTextObj","giftAidIt","GuestReview","spinnerOverlay","endCPLTracking","observeUntilEventObserved","attributes","observer","disconnect","formatCurrencyAsString","showCurrencyConversionModal","isCurrencyConversionModalOpen","showCVVField","cvv","childCVVInfo","processDonation","threeDSContainer","initializeThreeDS","trackGuestReviewPageDonateClick","isCvvSend","giftAidState","extraCostText","outSymbol","outAmount","extraAmount","track3DSProceedToPayment","isRecurring","stateConversionWithPayPal","getStateForConversionWithPayPal","endCustomCPLTracking","paymentNetwork","last_4","currency_conversion","toString","fundsIn","funds_in","fundsOut","funds_out","fee_amount","paymentCard","issuerName","inAmount","currencyConversion","fundingCode","getStateForConversionWithIssuer","currencyConversionType","paymentCardId","preferences","payment_card_id","validity","consentShareAddress","getShareAddress","hasCvvContingency","isCvvContingencyResolved","updateFundingOptionsState","donateNowRecurring","donateNowRec","weekly","monthly","yearly","giftaidFlag","updateGiftAidComponent","cscwarning","isGiftaiditEnabled","donatingFrom","isPPUnlistedCampaign","handleDonateClick","donatenow","handleThreeDSStepUpAuthSuccess","handleThreeDSFailure","GuestConfirmationPending","withPageTrack","withPostTransactionRequest","PendingView","GuestConfirmationSuccess","SuccessView","illustrationType","body2","linkLabel","handleLinkClick","buttonLabel","handleButtonClick","showCloseButton","centerBody","Illustration","PaymentError","ERROR_CODE","getPaymentError","trackErrorPageIM","GUEST_FAILURE_PAGE","WSM_CANNOT_PAY_SELF","WENT_WRONG","TEMP_GLITCH","tryagain","DID_NOT_WORK","DIFF_CREDIT_DEBIT","trydiffcard","L2","WSM_CANNOT_PAY_SELF_H","AmountLimitBreachError","customerServiceLink","handleTryAgain","noAccountErrorMessage","UnilateralError","UNILATERAL_ERROR_PAGE","align","ConfirmationBody","ThreeDSError","ConfirmationTitle","tryAgain","tryCard","CaptureOrder","orderStatus","getOrderStatus","isMemberFlow","isOneTouchUser","handlePaymentSuccess","handleConfirmation","flow","trackCaptureOrderPageIM","accessToken","isSubmitted","backBtnVisible","responseData","wTransactionEntry","requestError","timerCount","locality","setShouldRTL","currentUserState","isUnilateralAccount","GuestPage","reactLazyPreload","FallbackSpinner","userCookied","isOneTouch","isGNC","isPPCampaign","preload","parseUrlQuery","signup","getPageToRender","ReactDOM","render","exact","path","component","waitForXProps","xprops","close","charityCancelUrl","Review","MemberConfirmationSuccess","MemberConfirmationPending","all","loadScript","loadSlickProgressiveOnboarding","scriptPath","reject","nonce","script","onerror","readyState","importStatement","lazyComponent","genericPropType","propName","componentName","Error","cardSpecsPropType","cardSpecs","keys","stateListPropType","stateList","$id"],"mappings":"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","file":"donate.8c11629d9b8ae66628de.bundle.js","sourcesContent":["import React from 'react';\nimport { Modal, BodyText, Button, HeadingText } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from 'aphrodite';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from '@paypalcorp/pp-react';\n\nconst styles = StyleSheet.create({\n modalContent: {\n maxWidth: 600,\n margin: '0 auto',\n },\n okButton: {\n marginTop: 36,\n },\n msgMargin: {\n marginTop: '24px',\n },\n});\n\nexport default function DonateGiftAidHowItWorksOverlay(props) {\n const { content } = props;\n\n return (\n \n
\n
\n
\n \n \n {content.howitworks}\n \n \n \n \n \n {content.modalp1}\n \n \n \n \n \n \n {content.modalp2}\n \n \n \n \n \n \n {content.modalp3}\n \n \n \n \n \n \n {content.modalp4}\n \n \n \n\n \n \n
\n \n
\n \n
\n
\n
\n
\n \n );\n}\n\nDonateGiftAidHowItWorksOverlay.propTypes = {\n content: PropTypes.object,\n isOpen: PropTypes.bool,\n closeOverlay: PropTypes.func,\n};\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport { Checkbox, CaptionText, Button } from '@paypalcorp/pp-react';\nimport DonateGiftAidHowItWorksOverlay from './DonateGiftAidHowItWorksOverlay';\nimport { appendCdnHostName } from '../utility/geoUtils';\nimport { BodyText } from '@paypalcorp/pp-react-text';\n\nconst DonateGiftAid = ({\n isAlreadyEnrolled,\n isChecked,\n handleGiftAidOption,\n contentMsg,\n addressData,\n showAddress,\n}) => {\n const [showHelp, setShowHelp] = useState(isChecked);\n const [checked, setChecked] = useState(isChecked);\n const [isHowItWorksOverlayOpen, setIsHowItWorksOverlayOpen] = useState(false);\n\n useEffect(() => {\n if (isAlreadyEnrolled) {\n setShowHelp(false);\n }\n }, [isAlreadyEnrolled]);\n\n const handleCheckbox = (env) => {\n let checkedValue = env.target.checked;\n setChecked(checkedValue);\n setShowHelp(checkedValue);\n handleGiftAidOption(checkedValue);\n };\n\n const openHowItWorksOverlay = () => {\n setIsHowItWorksOverlayOpen(true);\n };\n\n const closeHowItWorksOverlay = () => {\n setIsHowItWorksOverlayOpen(false);\n };\n\n return (\n
\n
\n \n \n {contentMsg.extraCost}\n \n {contentMsg.learnMore}\n \n \n\n {isAlreadyEnrolled && (\n
\n \n {contentMsg.alreadyDone}\n
\n )}\n {!isAlreadyEnrolled && (\n \n )}\n\n {showHelp && (\n
\n
\n \n {contentMsg.applyGiftAid}\n \n
\n {showAddress && (\n
\n {contentMsg.taxpayer}\n
    \n
  • {addressData.fullName}
  • \n
  • {addressData.address1}
  • \n
  • {addressData.address2}
  • \n
  • {addressData.city}
  • \n
  • \n {addressData.state}, {addressData.zip}\n
  • \n
\n
\n )}\n
\n {contentMsg.confirmNote}\n
\n
\n )}\n\n \n
\n
\n );\n};\n\nDonateGiftAid.propTypes = {\n isAlreadyEnrolled: PropTypes.bool,\n showAddress: PropTypes.bool,\n addressData: PropTypes.any,\n isChecked: PropTypes.bool,\n handleGiftAidOption: PropTypes.func,\n contentMsg: PropTypes.object,\n isMember: PropTypes.bool,\n};\n\nexport default DonateGiftAid;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon } from '@paypalcorp/pp-react-icons';\nimport { grey700 } from '@paypalcorp/pp-react-colors';\nimport { trackErrorIM } from '../../fpti/fpti';\n\nconst STYLES = {\n error: {\n color: grey700,\n fontSize: '13px',\n },\n criticalIcon: {\n color: '#D20000',\n position: 'relative',\n fontSize: 'unset',\n marginRight: '5px',\n },\n};\n\n/**\n * Component for displaying amount validation error message\n */\nclass AmountValidationError extends Component {\n componentDidMount() {\n const { errorSourceField, errorString, errorCode } = this.props;\n\n trackErrorIM({\n errorCode: errorCode || 'DONATION_AMOUNT_VALIDATION_ERROR',\n errorMessage: errorString,\n fieldName: errorSourceField,\n });\n }\n render() {\n const { errorString } = this.props;\n\n if (!errorString) {\n return null;\n }\n\n return (\n \n \n \n {errorString}\n \n \n );\n }\n}\n\nAmountValidationError.propTypes = {\n errorString: PropTypes.string,\n errorSourceField: PropTypes.string,\n errorCode: PropTypes.string,\n donationAmount: PropTypes.string,\n};\n\nexport default AmountValidationError;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport AmountValidationError from './amountValidationError.js';\n\nconst messages = localsMessages('guest/crossBorder');\n\nconst STYLES = {\n container: {\n padding: '30px 0 30px 0',\n zIndex: 1,\n },\n calcRow: {\n display: 'inline-block',\n width: '40%',\n verticalAlign: 'top',\n },\n calcRowLeft: {\n margin: '0 1% 0 9%',\n },\n calcRowRight: {\n margin: '0 9% 0 1%',\n },\n calcLabel: {\n padding: '0 0 8px 5px',\n },\n inputCol: {\n position: 'relative',\n },\n input: {\n outlineOffset: '-1px',\n fontSize: 14,\n paddingLeft: 20,\n },\n inputLeft: {\n paddingRight: '100px',\n },\n inputRight: {\n paddingRight: '60px',\n },\n fromCode: {\n position: 'absolute',\n right: '1px',\n top: '1px',\n height: '40px',\n width: '90px',\n borderTop: 0,\n borderRight: 0,\n borderBottom: 0,\n },\n toCode: {\n position: 'absolute',\n right: '15px',\n top: 0,\n lineHeight: '42px',\n },\n conversion: {\n textAlign: 'center',\n paddingTop: '30px',\n },\n disabled: {\n opacity: '0.5',\n },\n inputCurrencyLeft: {\n position: 'absolute',\n marginTop: 12,\n marginLeft: 10,\n fontSize: 14,\n },\n hasError: {\n color: 'red',\n },\n};\n\nclass Calculator extends React.Component {\n constructor() {\n super();\n const { label: { youDonate, charityGet, conversion } = {} } =\n messages || {};\n this.state = {\n youDonateLabel: youDonate,\n charityGetLabel: charityGet,\n conversionLabel: conversion,\n };\n }\n\n componentDidMount() {\n this.setFromSymbol(this.props.toCode);\n }\n\n setFromSymbol = (toCode) => {\n const symbol =\n (this.props.currencySymbols && this.props.currencySymbols[toCode]) || '';\n this.setState({\n fromSymbol: symbol,\n });\n\n let padding = symbol.length * 10 + 10;\n document.getElementById('fromAmount').style.paddingLeft = `${padding}px`;\n };\n\n validateAmount = (ev, callback) => {\n let val = ev.target.value;\n let rgx = /^[0-9]*[.|,]?[0-9]?[0-9]?$/;\n\n if (val === '.' || val === ',' || !val.match(rgx)) {\n return;\n }\n callback(val);\n };\n\n handleFromChange = (ev) => {\n this.validateAmount(ev, this.props.handleFromChange);\n };\n\n handleToChange = (ev) => {\n this.validateAmount(ev, this.props.handleToChange);\n };\n\n handleFromCurrencyChange = (ev) => {\n let val = ev.target.value;\n this.props.handleFromCurrencyChange(val);\n this.setFromSymbol(val);\n };\n\n handleAmountFocus = (event) => {\n this.props.handleAmountFocus(event);\n };\n\n getLocalizedAmount = (amount) => {\n return `${amount}`.replace(/[.|,]/i, this.props.decimalPoint);\n };\n\n render() {\n const placeholder = this.getLocalizedAmount('0.00');\n const fromAmount = this.getLocalizedAmount(this.props.fromAmount);\n const toAmount = this.getLocalizedAmount(this.props.toAmount);\n const conversionRate = `${this.getLocalizedAmount('1.00')} ${\n this.props.fromCode\n } = ${this.getLocalizedAmount(this.props.conversionRate)} ${\n this.props.toCode\n }`;\n\n const calcLabelStyle = {\n ...STYLES.calcLabel,\n ...(this.props.toError ? STYLES.hasError : {}),\n };\n\n return (\n \n
\n \n
{this.state.youDonateLabel}
\n
\n
\n \n {this.state.fromSymbol}\n \n \n
\n \n {this.props.availableCurrencies.map((c) => (\n \n ))}\n \n
\n
\n \n
{this.state.charityGetLabel}
\n
\n
\n \n {this.props.charityAmountSymbol}\n \n \n
\n {this.props.toCode}\n
\n {this.props.toError && (\n \n )}\n \n \n\n {this.props.conversionRate && (\n \n {this.state.conversionLabel} {conversionRate}\n \n )}\n \n );\n }\n}\n\nCalculator.propTypes = {\n availableCurrencies: PropTypes.array.isRequired,\n currencySymbols: PropTypes.object.isRequired,\n decimalPoint: PropTypes.string.isRequired,\n conversionRate: PropTypes.string.isRequired,\n fromAmount: PropTypes.string.isRequired,\n fromCode: PropTypes.string.isRequired,\n fromDisabled: PropTypes.bool.isRequired,\n toAmount: PropTypes.string.isRequired,\n toCode: PropTypes.string.isRequired,\n toDisabled: PropTypes.bool.isRequired,\n handleFromChange: PropTypes.func.isRequired,\n handleFromCurrencyChange: PropTypes.func.isRequired,\n handleToChange: PropTypes.func.isRequired,\n charityAmountSymbol: PropTypes.string,\n handleAmountFocus: PropTypes.func,\n toError: PropTypes.bool,\n toErrorMessage: PropTypes.string,\n};\n\nexport default Calculator;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { PresetAmounts } from '@paypalcorp/donate-react';\nimport templateData from '../../utility/getTemplateData';\nimport * as AppActions from '../../actions/AppActions';\nimport AppStore from '../../stores/AppStore';\nimport {\n isOptInCoverFee,\n shouldSelectPresetAmount,\n} from '../coverFee/feeUtils';\nimport { getCurrencyParts } from '../../utility/formator';\nimport { formatAmountFromServerDNW } from './amountUtils';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { getGriffin, __getInitialData } from '../../utility/formator';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\n\nlet {\n amount: { presetOther, placeholderOtherAmount },\n} = localsMessages('common/amount');\n\nfunction PresetAmountRow(props) {\n const getSelectedOption = () => {\n if (AppStore.getDonationAmountType() === 'preset') {\n return AppStore.getDonationAmount();\n } else if (AppStore.getDonationAmountType() === 'userinput') {\n return 'Other';\n }\n return '';\n };\n\n const [presetAmounts, setPresetAmounts] = useState(\n templateData.presetAmounts\n ),\n [selectedOption, setSelectedOption] = useState(getSelectedOption()),\n [showOtherAmount, setShowOtherAmount] = useState(\n AppStore.getDonationAmountType() === 'userinput' ? true : false\n );\n\n const handlePresetAmountClick = (value) => {\n setSelectedOption(value);\n if (value !== 'Other') {\n const selectedAmount = value;\n props.handleAmountChange(`${selectedAmount}`);\n // Highlight the selected button\n setShowOtherAmount(false);\n setPresetAmounts(templateData.presetAmounts);\n // Clear the errors from amount field\n props.hideValidationError();\n\n AppActions.updateDonationAmountType('preset');\n } else {\n props.handleAmountChange('');\n setShowOtherAmount(true);\n }\n };\n\n useEffect(() => {\n // In case user opts in for cover fee and goes back to\n // landing page from guest page, we need to restore back\n // user's original entered amount\n const amountBeforeFee = AppStore.getAmountBeforeFee();\n if (amountBeforeFee && isOptInCoverFee()) {\n if (shouldSelectPresetAmount(amountBeforeFee)) {\n handlePresetAmountClick(amountBeforeFee);\n }\n }\n }, []);\n\n const handleAmountChange = (amount) => {\n let checkValue = parseFloat(amount.replace(',', '.').replace(' ', ''));\n\n if (AppStore.getDonationAmountType() === 'preset' && checkValue > 0) {\n AppActions.updateSelectedPresetButtonId('other');\n AppActions.updateDonationAmountType('userinput');\n props.handleAmountChange('0.00');\n trackLinkClick(LINK_NAME.PRESET_AMOUNT, {\n additionalData: {\n [FPTI_TAGS.SELECTED_PRESET_BUTTON_ID]: 'other',\n },\n });\n }\n if (checkValue > 0) {\n AppActions.updateDonationAmountType('userinput');\n props.handleAmountChange(amount);\n }\n };\n\n const handleAmountFocus = () => {\n props.handleAmountFocus();\n };\n\n const getPresetOptions = (values, symbol, charityAmountCode) => {\n const [firstParts = {}] = getCurrencyParts();\n const rightSymbol = firstParts.$ !== 'symbol';\n const result = values.map((value) => {\n let amountDisplayValue;\n if (rightSymbol) {\n amountDisplayValue = symbol\n ? `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })} ${symbol}`\n : `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`;\n } else {\n amountDisplayValue = symbol\n ? `${symbol}${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`\n : `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`;\n }\n return {\n label: amountDisplayValue,\n secondaryLabel: charityAmountCode,\n value: formatAmountFromServerDNW(value, charityAmountCode),\n };\n });\n return [...result, { label: presetOther, value: 'Other' }];\n };\n\n const amountFieldValue =\n AppStore.getDonationAmountType() === 'preset' ? '' : props.charityAmount;\n const presetOptions = getPresetOptions(\n presetAmounts,\n props.charityAmountSymbol,\n props.charityAmountCode\n );\n\n return (\n <>\n \n \n );\n}\n\nPresetAmountRow.propTypes = {\n hideValidationError: PropTypes.func,\n handleAmountChange: PropTypes.func,\n handleAmountFocus: PropTypes.func,\n charityAmount: PropTypes.string,\n showValidationError: PropTypes.bool,\n charityAmountSymbol: PropTypes.string,\n charityAmountCode: PropTypes.string,\n decimalPoint: PropTypes.string,\n isAmountEditable: PropTypes.bool,\n validationErrorMessage: PropTypes.string,\n validationErrorCode: PropTypes.string,\n};\nexport default PresetAmountRow;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _debounce from 'lodash/debounce';\nimport AppStore from '../stores/AppStore';\nimport * as AppActions from '../actions/AppActions';\nimport { BodyText } from '@paypalcorp/pp-react';\nimport getContent from 'pp-react-l10n';\nimport TemplateData from '../utility/getTemplateData';\nimport { fetcher } from '../utility/domUtils';\nimport { SingleAmount } from '@paypalcorp/donate-react';\nimport Calculator from '../components/amount/calculator';\nimport PresetAmountRow from './amount/PresetAmountRow';\nimport {\n setFeeAmountInStore,\n optOutCoverFee,\n isAtLandingPage,\n isOptInCoverFee,\n} from './coverFee/feeUtils';\nimport AppDispatcher from '../dispatcher/AppDispatcher';\nimport { getParameterByName } from '../utility/queryStringHelper';\nimport { addShake } from '../utility/helper';\nimport {\n getGriffin,\n __getInitialData,\n getAmountPlaceHolder,\n} from '../utility/formator';\nimport { localsMessages } from '../utility/getTemplateData';\nimport { trackErrorIM } from '../fpti/fpti';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\n\nlet griffin = getGriffin();\n\nlet {\n amount: { label: amountLabel = '' },\n} = localsMessages('common/amount');\nclass AmountWrapper extends React.Component {\n constructor(props) {\n super(props);\n\n const currencyObj = JSON.parse(\n document.getElementById('currencyLists').innerHTML || {}\n );\n const { currencies: currencyLists, symbols: currencySymbols } =\n currencyObj || {};\n\n let userCountry = TemplateData.donorIpCountry;\n let availableCurrencies = currencyLists[userCountry] || currencyLists.US;\n let userAmountCode = availableCurrencies[0];\n let charityAmountCode = AppStore.getDonationCode();\n let isEditable = !!TemplateData.donationAmountEditable;\n // let showCBCalculator = TemplateData.pxp && TemplateData.pxp.calculator && TemplateData.pxp.calculator.experiment || false;\n\n let isCalculator = false;\n // Disabled Calculator\n // let isCalculator =\n // \tisEditable &&\n // \tuserAmountCode !== charityAmountCode &&\n // \t(showCBCalculator || TemplateData.isCorpIp);\n\n this.state = {\n charityAmountCode,\n charityAmount: AppStore.getDonationAmount() || '',\n charityAmountSymbol: AppStore.getDonationSymbol(),\n charityDisabled: false,\n\n userCountry,\n userAmountCode,\n userAmount: '',\n userDisabled: false,\n\n availableCurrencies,\n currencySymbols,\n isCalculator,\n decimalPoint: TemplateData.donationDecimalPoint || '.',\n conversionRate: '',\n isAmountEditable: isEditable,\n\n showValidationError: props.showValidationError || false,\n validationErrorMessage: props.validationErrorMessage || '',\n validationErrorCode: props.validationErrorCode || '',\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.state.showValidationError !== nextProps.showValidationError) {\n this.setState({\n showValidationError: nextProps.showValidationError,\n validationErrorMessage: nextProps.validationErrorMessage,\n validationErrorCode: nextProps.validationErrorCode,\n });\n }\n }\n\n componentDidMount = () => {\n // Watch for amount change for the case that donor opts in to cover fee\n // and clicks back button to go back to landing page\n // as we need to restore donor's original entered amount\n this.dispatcherCharityAmount = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_AMOUNT') {\n const { action: { item: { amount = 0 } = {} } = {} } = payload;\n this.setState({\n charityAmount: amount,\n });\n }\n });\n\n if (this.state.isAmountEditable) {\n addFeature(FEATURES.DONATION_AMOUNT_EDITABLE);\n }\n };\n\n componentWillUnmount = () => {\n AppDispatcher.unregister(this.dispatcherCharityAmount);\n };\n\n isGuestReviewPage = () => {\n return (\n window.location.pathname.includes('guest') ||\n ![undefined, null].includes(getParameterByName('signup'))\n );\n };\n\n normalizeAmount = (amount) => {\n return isNaN(amount) ? 0 : amount;\n };\n\n setAppAmount = (amount) => {\n AppActions.changeAmount({\n amount,\n });\n };\n\n getConversionRate = (state, exchangeRate) => {\n let rate =\n exchangeRate.base_currency_code === state.userAmountCode\n ? exchangeRate.quote_amount\n : 1 / exchangeRate.quote_amount;\n return rate.toFixed(2);\n };\n\n getConversionRequest = (state, params, callback) => {\n this.getConversionRequest = _debounce((st, par, fn) => {\n const queryParams = {\n fromCountry: st.userCountry,\n fromCurrency: st.userAmountCode,\n toCurrency: st.charityAmountCode,\n ...par,\n };\n\n if (queryParams.fromAmount) {\n queryParams.fromAmount = this.normalizeAmount(queryParams.fromAmount);\n } else {\n queryParams.toAmount = this.normalizeAmount(queryParams.toAmount);\n }\n const url = '/donate/calculate-foreign-exchange';\n this.props.conversionStatus(true);\n Promise.resolve(\n fetcher(url, {\n method: 'POST',\n body: JSON.stringify(queryParams),\n })\n )\n .then((response) => response.json())\n .then(({ result }) => {\n this.props.conversionStatus(false);\n fn(result);\n })\n .catch(() => {\n this.props.conversionStatus(false);\n let amount = queryParams.fromAmount || queryParams.toAmount || '';\n amount += '';\n fn({\n target: { value: amount },\n source: { value: amount },\n exchange_rate: {\n base_currency_code: queryParams.userAmountCode,\n quote_amount: 1,\n },\n });\n });\n }, 500);\n\n this.getConversionRequest(state, params, callback);\n };\n\n /*\n * getConversion\n * Getting conversion rate for calculator\n */\n getConversion = (state, params, fn) => {\n // Conversion is only required for calculator\n if (state.isCalculator) {\n this.getConversionRequest(state, params, fn);\n } else {\n const amount = params.fromAmount || params.toAmount || '';\n fn({\n target: { value: amount },\n source: { value: amount },\n exchange_rate: {\n base_currency_code: state.userAmountCode,\n quote_amount: 1,\n },\n });\n }\n };\n\n handleAmountChange = (amount) => {\n this.setState({ charityAmount: amount });\n this.setAppAmount(amount);\n\n // let recurringStatus = AppStore.getDonationRecurring() === 'checked';\n // if (recurringStatus) {\n // if (isAmountGreaterThanZero(amount)) {\n // $('#donateNowAmt').html(this.state.charityAmountSymbol + amount);\n // } else {\n // $('#donateNowAmt').html(' ');\n // }\n // }\n\n if (isAtLandingPage()) {\n // Compute fee amount and update store\n setFeeAmountInStore();\n // Let landing page know that fee amount displayed needs to be updated\n this.props.updateFeeAmount();\n } else {\n // Since user updates the amount in the guest page\n // we should opt user out for cover the fee in case\n // they go back to landing page\n if (isOptInCoverFee()) {\n optOutCoverFee();\n }\n\n // In case user selects a preset button but update the amount\n // in review page, the donation amount type should now be\n // \"userinput\"\n if (AppStore.getDonationAmountType() === 'preset') {\n AppActions.updateDonationAmountType('userinput');\n }\n }\n };\n\n handleAmountFocus() {\n this.props.onFocus();\n }\n\n handleUserAmountChange = (amount) => {\n let snapshot = {\n userAmount: amount,\n charityDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n fromAmount: state.userAmount,\n },\n ({ target, exchange_rate }) => {\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n charityAmount: target.value,\n charityDisabled: false,\n });\n this.setAppAmount(target.value);\n }\n );\n };\n\n handleUserCurrencyChange = (currencyCode) => {\n let snapshot = {\n userAmountCode: currencyCode,\n charityDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n fromAmount: state.userAmount,\n },\n ({ target, exchange_rate }) => {\n state.charityAmount = target.value;\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n charityAmount: state.charityAmount,\n charityDisabled: false,\n });\n this.setAppAmount(target.value);\n }\n );\n };\n\n handleCharityAmountChange = (amount) => {\n let snapshot = {\n charityAmount: amount,\n userDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n toAmount: state.charityAmount,\n },\n ({ source, exchange_rate }) => {\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n userAmount: source.value,\n userDisabled: false,\n });\n this.setAppAmount(state.charityAmount);\n }\n );\n };\n\n handleTrackError = (errorCode, errorString, errorSourceField) => {\n trackErrorIM({\n errorCode: errorCode || 'DONATION_AMOUNT_VALIDATION_ERROR',\n errorMessage: errorString,\n fieldName: errorSourceField,\n });\n };\n\n shouldShowPresetAmounts = () => {\n // Should only show preset amount options in landing\n // page not review page to make the experience consistent\n // with member flow. It works better for cover the fees as well\n\n const presetAmountsCondition =\n TemplateData.enablePresetAmounts &&\n !this.state.isCalculator &&\n !this.isGuestReviewPage();\n\n if (presetAmountsCondition) {\n addFeature(FEATURES.PRESET);\n }\n\n return presetAmountsCondition;\n };\n\n renderPresetAmounts = () => {\n return (\n \n );\n };\n\n getRecurringLabel = () => {\n switch (this.props.selectedRecurringFrequency) {\n case 'Week':\n return getContent('locals')('guest/guestForm')('label.perWeek');\n case 'Month':\n return getContent('locals')('guest/guestForm')('label.perMonth');\n case 'Year':\n return getContent('locals')('guest/guestForm')('label.perYear');\n default:\n return null;\n }\n };\n\n render() {\n if (this.shouldShowPresetAmounts()) {\n return (\n
\n {this.renderPresetAmounts()}\n
\n );\n }\n\n return (\n
\n {this.state.isCalculator ? (\n \n ) : (\n <>\n \n {AppStore.getDonationRecurring() === 'checked' && (\n \n {this.getRecurringLabel()}\n \n )}\n \n )}\n
\n );\n }\n}\n\nAmountWrapper.propTypes = {\n conversionStatus: PropTypes.func,\n showValidationError: PropTypes.bool,\n hideValidationError: PropTypes.func,\n validationErrorMessage: PropTypes.string,\n validationErrorCode: PropTypes.string,\n validateDonationAmount: PropTypes.func,\n onFocus: PropTypes.func,\n updateFeeAmount: PropTypes.func,\n selectedRecurringFrequency: PropTypes.string,\n};\n\nexport default AmountWrapper;\n","/**\n * Card security code input used for adding a card\n */\nimport React from 'react';\nimport { TextInput } from '@paypalcorp/pp-react';\nimport PropTypes from 'prop-types';\n\nimport { cardSpecPropType } from 'prop-validators';\n\nclass CardSecurityCode extends React.Component {\n static propTypes = {\n cardSpec: cardSpecPropType,\n label: PropTypes.string.isRequired,\n errorMessage: PropTypes.string,\n handleChangeSecurityCode: PropTypes.func.isRequired,\n handleFocus: PropTypes.func,\n handleBlur: PropTypes.func,\n dir: PropTypes.string,\n helperText: PropTypes.string,\n };\n\n static defaultProps = {\n handleFocus: () => {},\n handleBlur: () => {},\n };\n\n state = { value: '', showIsRequiredError: false };\n\n /**\n * Handle changing the csc\n * @param {String} securityCode - the csc\n * @return {String} securityCode - numbers only\n */\n handleChangeSecurityCode = ({ target: { value: securityCode } }) => {\n securityCode = securityCode.replace(/\\D+/g, '');\n this.setState({ value: securityCode });\n this.handleCheckForValue(securityCode);\n this.props.handleChangeSecurityCode(securityCode);\n return securityCode;\n };\n\n /**\n * Check for a security code value\n * If the field is required, we should show that this field needs a value\n * @param {String} securityCode - the csc\n */\n handleCheckForValue = (securityCode) => {\n const cscSpecs = this.props.cardSpec.fields.csc;\n const isRequired = cscSpecs.required;\n this.setState({ showIsRequiredError: isRequired && !securityCode });\n };\n\n /**\n * Call parent's handleFocus\n * @param {String} securityCode - the csc\n */\n handleFocus = (securityCode) => {\n this.props.handleFocus(securityCode);\n };\n\n /**\n * Check for a security code value and call parent's handleBlur\n * @param {String} securityCode - the csc\n */\n handleBlur = ({ target: { value: securityCode } }) => {\n this.handleCheckForValue(securityCode);\n this.props.handleBlur(securityCode);\n };\n\n render() {\n const cscSpecs = this.props.cardSpec.fields.csc;\n // let helpText = '●'.repeat(cscSpecs.maxlength)\n let { errorMessage } = this.props;\n\n return (\n
\n \n
\n );\n }\n}\n\nexport default CardSecurityCode;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","export var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport { canUseDOM } from './utils';\n\nvar Portal = function (_React$Component) {\n _inherits(Portal, _React$Component);\n\n function Portal() {\n _classCallCheck(this, Portal);\n\n return _possibleConstructorReturn(this, (Portal.__proto__ || Object.getPrototypeOf(Portal)).apply(this, arguments));\n }\n\n _createClass(Portal, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n }\n }, {\n key: 'render',\n value: function render() {\n if (!canUseDOM) {\n return null;\n }\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n return ReactDOM.createPortal(this.props.children, this.props.node || this.defaultNode);\n }\n }]);\n\n return Portal;\n}(React.Component);\n\nPortal.propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};\n\nexport default Portal;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// This file is a fallback for a consumer who is not yet on React 16\n// as createPortal was introduced in React 16\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nvar Portal = function (_React$Component) {\n _inherits(Portal, _React$Component);\n\n function Portal() {\n _classCallCheck(this, Portal);\n\n return _possibleConstructorReturn(this, (Portal.__proto__ || Object.getPrototypeOf(Portal)).apply(this, arguments));\n }\n\n _createClass(Portal, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.renderPortal();\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(props) {\n this.renderPortal();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n ReactDOM.unmountComponentAtNode(this.defaultNode || this.props.node);\n if (this.defaultNode) {\n document.body.removeChild(this.defaultNode);\n }\n this.defaultNode = null;\n this.portal = null;\n }\n }, {\n key: 'renderPortal',\n value: function renderPortal(props) {\n if (!this.props.node && !this.defaultNode) {\n this.defaultNode = document.createElement('div');\n document.body.appendChild(this.defaultNode);\n }\n\n var children = this.props.children;\n // https://gist.github.com/jimfb/d99e0678e9da715ccf6454961ef04d1b\n if (typeof this.props.children.type === 'function') {\n children = React.cloneElement(this.props.children);\n }\n\n this.portal = ReactDOM.unstable_renderSubtreeIntoContainer(this, children, this.props.node || this.defaultNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return null;\n }\n }]);\n\n return Portal;\n}(React.Component);\n\nexport default Portal;\n\n\nPortal.propTypes = {\n children: PropTypes.node.isRequired,\n node: PropTypes.any\n};","import ReactDOM from 'react-dom';\n\nimport Portalv4 from './Portal';\nimport LegacyPortal from './LegacyPortal';\n\nvar Portal = void 0;\n\nif (ReactDOM.createPortal) {\n Portal = Portalv4;\n} else {\n Portal = LegacyPortal;\n}\n\nexport default Portal;","import React, { Component } from 'react';\nimport AppStore from '../../stores/AppStore';\nimport _get from 'lodash/get';\nimport { getPaymentCardNetwork } from '../../utility/card-utils';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { StyleSheet, css } from 'aphrodite';\nimport _isEmpty from 'lodash/isEmpty';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { appendCdnHostName } from '../../utility/geoUtils';\nimport withTheme from '../../components/withTheme';\nimport { BodyText, HeadingText } from '@paypalcorp/pp-react';\n\nlet threeDSText = localsMessages('common/threeDSecure');\n\nconst LOADING_GIF_SOURCE = appendCdnHostName(\n '/ui-web/money-icons/partnerships/mbLoader_256_sm.gif'\n);\n\nconst STYLES = StyleSheet.create({\n spinnerAlign: {\n margin: '30px auto 30px',\n },\n cardImg: {\n marginTop: '24px',\n },\n});\n\nconst { wontTakeLong, DoNotCloseOrRefresh } = localsMessages(\n 'common/threeDSecure'\n);\n\nclass ThreeDSSpinner extends Component {\n constructor(props) {\n super(props);\n this.state = {\n cardImg: null,\n network: null,\n };\n }\n\n setNetworkDetails = () => {\n const fundingOptions = AppStore.getFundingOptions();\n let cardImg = _get(\n fundingOptions,\n 'sources[0].payment_card.issuer.thumbnail_logo_url'\n );\n let network = getPaymentCardNetwork(\n _get(fundingOptions, 'sources[0].payment_card')\n );\n let myData = AppStore.getAllData() || {};\n if (\n cardImg === null ||\n _isEmpty(cardImg) ||\n typeof cardImg === 'undefined'\n ) {\n const cardType = _get(myData, 'cardSpec.cardSpec.type', '')\n .replace(/[.,_]|\\s\\(.*\\)/g, '')\n .replace(/[\\s_]/g, '-')\n .toLowerCase();\n cardImg = appendCdnHostName(\n `/digitalassets/c/consumer/p2p/funding-sources/${cardType}.png`\n );\n }\n if (\n network === null ||\n _isEmpty(network) ||\n typeof network === 'undefined'\n ) {\n network = myData.cardSpec.cardSpec.type.replace(/[_]/g, ' ');\n }\n this.setState({ cardImg, network });\n };\n\n componentDidMount() {\n // Hide the donate spinner in the background\n // to prevent double spinners\n hideSpinnerOverlay();\n this.setNetworkDetails();\n }\n\n render() {\n let confirmingWithText = _get(\n threeDSText,\n 'confirmingWith',\n \"We're confirming your info with {network}\"\n );\n const confirmingWith = confirmingWithText.replace(\n new RegExp('{network}', 'g'),\n this.state.network\n );\n\n return (\n
\n
\n
\n {/*
*/}\n
\n \n
\n \n {confirmingWith}\n \n
\n {this.state.cardImg ? (\n \"Card\n ) : (\n ''\n )}\n
\n
\n {wontTakeLong}\n {DoNotCloseOrRefresh}\n
\n
\n
\n
\n );\n }\n}\n\nexport default withTheme(ThreeDSSpinner);\n","import React, { Component } from 'react';\nimport AppStore from '../../stores/AppStore';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport _get from 'lodash/get';\nimport _find from 'lodash/find';\nimport { trackThreeDsDdcFailure } from '../../fpti/fpti';\nimport { FPTI_TAGS } from '../../fpti/fptiConstants';\n\nclass ThreeDSDeviceDataCollection extends Component {\n static propTypes = {\n onThreeDSDDCComplete: PropTypes.func,\n };\n\n getThreeDSParams() {\n const fundingOptions = AppStore.getFundingOptions();\n const contingencies = _get(fundingOptions, 'contingencies') || [];\n const threeDSContingency =\n _find(contingencies, { action: '3D_SECURE_DATA_COLLECTION_REQUIRED' }) ||\n {};\n\n return threeDSContingency;\n }\n\n componentDidMount() {\n // 'message' is passed after 3DS Submit is completed\n window.addEventListener('message', this.handleDDCEvent);\n\n const { three_ds_reference_id: threeDS2ReferenceId } =\n this.getThreeDSParams();\n\n if (this.refs[threeDS2ReferenceId]) {\n try {\n this.refs[threeDS2ReferenceId].submit();\n } catch (e) {\n console.log('e ', e);\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('message', this.handleDDCEvent);\n }\n\n handleDDCEvent = (event) => {\n const eventOrigin = _get(event, 'origin', '');\n if (eventOrigin.includes('cardinalcommerce.com')) {\n let data = null;\n try {\n data = JSON.parse(event.data);\n } catch (exception) {\n // Error handler incase parsing goes wrong\n data = {};\n }\n\n const messageType = _get(data, 'MessageType', '');\n if (messageType === 'profile.completed') {\n this.onDDCComplete(event);\n } else {\n trackThreeDsDdcFailure({\n [FPTI_TAGS.STATUS]: messageType,\n });\n console.log('DDC not completed with message type: ', messageType);\n }\n }\n };\n\n onDDCComplete = (event) => {\n this.props.onThreeDSDDCComplete(event);\n };\n\n render() {\n const {\n device_data_collection_url: deviceDataCollectionUrl,\n jwt,\n three_ds_reference_id: threeDS2ReferenceId,\n } = this.getThreeDSParams();\n\n if (!deviceDataCollectionUrl) {\n return null;\n }\n\n return (\n
\n \n
\n \n );\n };\n\n render() {\n return (\n \n {this.getModalBody()}\n \n );\n }\n}\n\nThreeDSIframe.propTypes = {\n onStepUpAuthComplete: PropTypes.func,\n icon: PropTypes.string,\n hideModal: PropTypes.func,\n isOpen: PropTypes.bool,\n onClose: PropTypes.func,\n};\nexport default withTheme(ThreeDSIframe);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Portal } from 'react-portal';\nimport ThreeDSSpinner from './ThreeDSSpinner';\nimport ThreeDSDeviceDataCollection from './ThreeDSDeviceDataCollection';\nimport ThreeDSIframe from './ThreeDSIframe';\nimport * as AppActions from '../../actions/AppActions';\nimport _get from 'lodash/get';\nimport { fetcher } from '../../utility/domUtils';\nimport { FPTI_TAGS } from '../../fpti/fptiConstants';\nimport templateData from '../../utility/getTemplateData';\nimport {\n trackThreeDsDdcComplete,\n trackThreeDsDdcStart,\n trackThreeDsLookupComplete,\n trackThreeDsLookupStart,\n} from '../../fpti/fpti';\n\nclass ThreeDSContainer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n showThreeDSIframe: false,\n showThreeDSSpinner: false,\n showThreeDSDeviceDataCollection: false,\n threeDSDCCStartTime: null,\n };\n }\n\n componentDidMount() {\n this.props.onRef(this);\n }\n\n componentWillUnmount() {\n this.props.onRef(undefined);\n }\n\n initializeThreeDS() {\n let startTime = new Date().getTime();\n this.setState({\n showThreeDSDeviceDataCollection: true,\n showThreeDSSpinner: true,\n threeDSDCCStartTime: startTime,\n });\n\n const fptiData = {\n [FPTI_TAGS.THREE_DS_DCC_START_TIME]: startTime,\n [FPTI_TAGS.THREE_DS_SPINNER_START_TIME]: startTime,\n };\n trackThreeDsDdcStart(fptiData);\n }\n\n handleThreeDSDDCComplete = () => {\n this.setState({\n showThreeDSDeviceDataCollection: false,\n });\n\n const threeDSDCCEndTime = new Date().getTime();\n const fptiData = {\n [FPTI_TAGS.THREE_DS_DCC_START_TIME]: this.state.threeDSDCCStartTime,\n [FPTI_TAGS.THREE_DS_DCC_END_TIME]: threeDSDCCEndTime,\n [FPTI_TAGS.THREE_DS_SPINNER_START_TIME]: this.state.threeDSDCCStartTime,\n [FPTI_TAGS.THREE_DS_SPINNER_END_TIME]: threeDSDCCEndTime,\n };\n trackThreeDsDdcComplete(fptiData);\n this.resolveThreeDSContingency();\n };\n\n resolveThreeDSContingency = () => {\n trackThreeDsLookupStart({\n [FPTI_TAGS.THREE_DS_LOOKUP_START_TIME]: new Date().getTime(),\n });\n\n fetcher('/donate/guest/resolve-threeds-contingency', {\n method: 'POST',\n body: JSON.stringify({\n token: templateData.token,\n onboardingEnabled: templateData.onboardingEnabled,\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n this.hideThreeDSSpinner();\n\n const threeDSContingency = _get(result, 'data.threeDSContingency');\n const resolved = _get(threeDSContingency, 'threeDSContingencyResolved');\n\n trackThreeDsLookupComplete({\n timestamp: {\n [FPTI_TAGS.THREE_DS_LOOKUP_END_TIME]: new Date().getTime(),\n },\n [FPTI_TAGS.CONTINGENCY_RESOLVED]: resolved,\n [FPTI_TAGS.URL]: _get(\n threeDSContingency,\n 'threeDS2Contingency.3d_secure_redirect_link'\n ),\n [FPTI_TAGS.ACTION]: _get(\n threeDSContingency,\n 'threeDS2Contingency.action'\n ),\n });\n\n if (resolved) {\n // 3DS Contingency resolved without StepUp Auth\n this.props.onThreeDSStepUpAuthNotRequired();\n\n return;\n }\n // Save threeDS data and show 3DS iframe\n AppActions.updateThreeDSData(threeDSContingency);\n this.showThreeDSIframe();\n })\n .catch((e) => {\n // Clear 3DS data\n AppActions.updateThreeDSData({});\n this.hideThreeDSIframe();\n this.props.onThreeDSFailure();\n });\n };\n\n handleThreeDSStepUpAuthComplete = ({ confirmationStatus = false, error }) => {\n if (confirmationStatus && confirmationStatus === 'threeDS-success') {\n this.props.onThreeDSStepUpAuthSuccess();\n } else {\n this.props.onThreeDSStepUpAuthFailure();\n return;\n }\n };\n\n showThreeDSIframe = () => {\n this.setState({\n showThreeDSIframe: true,\n });\n };\n\n hideThreeDSIframe = () => {\n this.setState({\n showThreeDSIframe: false,\n });\n };\n\n showThreeDSSpinner = () => {\n this.setState({\n showThreeDSSpinner: true,\n });\n };\n hideThreeDSSpinner = () => {\n this.setState({\n showThreeDSSpinner: false,\n });\n };\n\n render() {\n return (\n
\n {this.state.showThreeDSSpinner && (\n \n \n \n )}\n\n {this.state.showThreeDSDeviceDataCollection && (\n \n )}\n\n {this.state.showThreeDSIframe && (\n \n )}\n
\n );\n }\n}\n\nThreeDSContainer.propTypes = {\n onThreeDSStepUpAuthNotRequired: PropTypes.func,\n onThreeDSStepUpAuthSuccess: PropTypes.func,\n onThreeDSStepUpAuthFailure: PropTypes.func,\n onThreeDSFailure: PropTypes.func,\n onRef: PropTypes.func,\n toggleSpinner: PropTypes.func,\n};\n\nexport default ThreeDSContainer;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import React, { Component } from 'react';\nimport templateData, { localsMessages } from '../../utility/getTemplateData';\nimport {\n handleGuestCountryChange,\n hideSpinnerOverlay,\n showSpinnerOverlay,\n} from '../../utility/helper';\nimport * as DonateAppActions from '../../actions/AppActions';\nimport { getInitialData } from '../../utility/formator';\nimport AppStore from '../../stores/AppStore';\nimport { getParametersFromUrl } from '../../utility/queryStringHelper';\nimport PropTypes from 'prop-types';\nimport { startCustomCPLTrackingForConfirmationPage } from '../../utility/cpl';\nimport {\n fetcher,\n scrollElementIntoView,\n objectOrArrayToQueryString,\n} from '../../utility/domUtils';\nimport isEmpty from 'lodash/isEmpty';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\n\nconst initialData = getInitialData();\nconst serviceErrorMessages = localsMessages('errors/service');\n\nconst ERROR_ELEMENT_SELECTOR = [\n '.vx_has-error-with-message',\n '.service_error_holder',\n].join();\n\nfunction withDonate(WrappedComponent) {\n return class extends Component {\n static propTypes = {\n history: PropTypes.object,\n };\n\n constructor(props) {\n super(props);\n this.country = initialData.selectedCountry;\n }\n\n handleCountryChange = (country) => {\n if (country !== this.country) {\n this.toggleSpinner(true);\n DonateAppActions.changeCountry({\n country: country,\n });\n this.country = country;\n\n // Beacons for country change\n trackLinkClick(LINK_NAME.CHANGE_COUNTRY, {\n additionalData: {\n [FPTI_TAGS.COUNTRY]: country,\n },\n });\n\n let { token, signUp = false } = templateData;\n let url = signUp\n ? `/donate?token=${token}&signup=true&country.x=${country}&locale.x=${country}`\n : `/donate?token=${token}&country.x=${country}&locale.x=${country}&countryChange=true&clientState=/donate/guest?token=${token}`;\n\n handleGuestCountryChange(url);\n }\n };\n\n /*\n * showing and hiding spinner\n */\n toggleSpinner = (isSpinner = false) => {\n if (isSpinner) {\n showSpinnerOverlay();\n } else {\n hideSpinnerOverlay();\n }\n };\n\n // handles scrolling screen to the error\n handleScrollToError = () => {\n scrollElementIntoView(ERROR_ELEMENT_SELECTOR);\n return;\n };\n\n getDonateGuestUrl = () => {\n const { token, country, language } = templateData;\n\n let url = `/donate/guest?token=${token}`;\n if (country) {\n url = url + `&country.x=${country}`;\n }\n\n if (country && language) {\n url = url + `&locale.x=${country}_${language}`;\n }\n\n return url;\n };\n\n getFormData() {\n return AppStore.getFormData();\n }\n\n saveFormData(formData) {\n DonateAppActions.saveFormData(formData);\n }\n\n showErrorOnLoad() {\n const url = window.location.href;\n let params = getParametersFromUrl(url);\n\n if (params.showErrorOnLoad) {\n if (params.showErrorOnLoad === 'fulfillment') {\n // TODO: update error code to the actual fullfilment error code\n let errorCode = 'WSM_TRANSACTION_FAILED_DUE_TO_INVALID_CARD_DATA';\n let errorMsgs = [\n {\n key: 0,\n value: serviceErrorMessages[errorCode],\n },\n ];\n\n // adding delay to wait for the dispatcher to get registered in ServerErrors\n setTimeout(\n () =>\n DonateAppActions.updateServerErrors({ serverErrors: errorMsgs }),\n 250\n );\n }\n // delete params.showErrorOnLoad;\n\n // const query = $.param(params);\n // const cleanedUrl = `/donate/guest/?${query}`;\n // window.history.replaceState({}, document.title, cleanedUrl);\n }\n }\n\n doFulfilment = (params = {}) => {\n const { securityCode } = params;\n this.toggleSpinner(true);\n\n fetcher('/donate/guest/fullfilment', {\n method: 'POST',\n body: JSON.stringify({\n token: templateData.token,\n note: AppStore.getDonationNote(),\n fundingOptionId: AppStore.getFundingOptions().id,\n email: AppStore.getEmail(),\n billingAddress: AppStore.getBillingAddress(),\n giftAidItFlag: AppStore.getGiftaidItFlagStatus() || false,\n card: { securityCode },\n onboardingEnabled: templateData.onboardingEnabled,\n selectedRecurringFrequency: AppStore.getSelectedRecurringFrequency(),\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n if (result.code === 'WSM_PAYMENT_DENIED') {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n return;\n } else if (result.status === 'redirect') {\n this.toggleSpinner(false);\n window.location.href = result.url;\n return;\n } else if (\n result.code === 'WSM_TRANSACTION_FAILED_DUE_TO_INVALID_CARD_DATA'\n ) {\n // fulfillment error\n const { token, country } = templateData;\n\n let clientState = encodeURIComponent(\n `/donate/guest?token=${token}&showErrorOnLoad=fulfillment`\n );\n window.location.href = `/donate?token=${token}&country.x=${country}&locale.x=${country}&clientState=${clientState}`;\n return;\n } else if (result.data && result.data.confirmationData) {\n startCustomCPLTrackingForConfirmationPage();\n this.toggleSpinner(false);\n const { token } = templateData;\n let confirmationData = result.data.confirmationData || {};\n const { selectedRecurringFrequency } = confirmationData;\n const queryParams = objectOrArrayToQueryString({\n token,\n selectedRecurringFrequency,\n });\n\n DonateAppActions.updateConfirmation({\n confirmation: confirmationData,\n });\n if (confirmationData?.selectedRecurringFrequency) {\n DonateAppActions.changeSelectedRecurringFrequency({\n selectedRecurringFrequency:\n confirmationData.selectedRecurringFrequency,\n });\n }\n if (confirmationData.isOfacPending) {\n this.props.history.push(`/donate/guest/pending?${queryParams}`);\n } else {\n this.props.history.push(\n `/donate/guest/confirmation?${queryParams}`\n );\n }\n } else {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n }\n })\n .catch(() => {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n });\n };\n\n createOrder = (params) => {\n const token = templateData.token;\n\n fetcher(`/donate/orders?dtoken=${token}`, {\n method: 'POST',\n body: JSON.stringify(params),\n })\n .then((response) => response.json())\n .then((result) => {\n console.log('result ', result);\n\n if (!isEmpty(result.cartUrl)) {\n window.location.href = result.cartUrl;\n } else {\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n }\n })\n .catch(() => {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n });\n };\n\n captureOrder = (orderToken, donateToken, payerID) => {\n return fetcher(\n `/donate/orders/${orderToken}/capture?dtoken=${donateToken}&PayerID=${payerID}`,\n {\n method: 'POST',\n }\n );\n };\n\n render() {\n return (\n \n );\n }\n };\n}\n\nexport default withDonate;\n","/**\n * Card Utilities\n * For use with linking a card\n *\n * - get card type [visa, mastercard, amex, discover, maestro, unionpay] based on the card number\n */\nimport { localsMessages } from './getTemplateData';\nimport _get from 'lodash/get';\n\nconst fundingTypes = localsMessages('common/fundingTypes');\n\nexport const defaultCardSpec = {\n type: 'card',\n fields: {\n ccNumber: {\n required: true,\n pattern: '4[0-9]{12}(?:[0-9]{3})?',\n maxlength: 19,\n },\n expirationDate: {\n required: true,\n pattern: '(0[1-9]|1[012])[/]((20)[0-9]{2}|[0-9]{2})',\n maxlength: 7,\n },\n csc: {\n required: true,\n pattern: '[0-9]*',\n maxlength: 3,\n minlength: 3,\n },\n },\n};\n\n/**\n * Get the card type based on the card number\n * @param {Object} cardSpecs - the card specifications based on user's locale\n * @param {String} cardNumber - the valid card number (numbers only)\n * @return {Object} cardType - the card type specs for a specific card\n */\nexport function getSpecificCardSpec({ cardTypes }, cardNumber) {\n cardNumber = cardNumber.replace(/\\D+/g, '');\n\n for (let card in cardTypes) {\n let cardSpec = cardTypes[card];\n if (\n new RegExp(`^${cardSpec.fields.ccNumber.autodetect}$`).test(cardNumber)\n ) {\n return cardSpec;\n }\n }\n return defaultCardSpec;\n}\n\nconst PAYMENT_CARDS = {\n VISA: 'VISA',\n MASTERCARD: 'MASTERCARD',\n MASTER_CARD: 'MASTER_CARD',\n MAESTRO: 'MAESTRO',\n AMEX: 'AMEX',\n DISCOVER: 'DISCOVER',\n JCB: 'JCB',\n CHINA_UNION_PAY: 'CHINA_UNION_PAY',\n};\n\nexport function getPaymentCardNetwork(source) {\n switch (source.network) {\n case PAYMENT_CARDS.VISA:\n return _get(fundingTypes, 'fundingType.visa');\n case PAYMENT_CARDS.MASTERCARD:\n case PAYMENT_CARDS.MASTER_CARD:\n return _get(fundingTypes, 'fundingType.mastercard');\n case PAYMENT_CARDS.MAESTRO:\n return _get(fundingTypes, 'fundingType.maestro');\n case PAYMENT_CARDS.AMEX:\n return _get(fundingTypes, 'fundingType.amex');\n case PAYMENT_CARDS.DISCOVER:\n return _get(fundingTypes, 'fundingType.discover');\n case PAYMENT_CARDS.CHINA_UNION_PAY:\n return _get(fundingTypes, 'fundingType.china_union_pay');\n default:\n return source.network;\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon } from '@paypalcorp/pp-react';\n\nexport default function NoteFieldError(props) {\n const errorText = props.errorText;\n\n if (!errorText) {\n return null;\n }\n return (\n
\n \n \n \n {errorText}\n \n \n
\n );\n}\n\nNoteFieldError.propTypes = {\n errorText: PropTypes.string,\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport templateData, { localsMessages } from '../utility/getTemplateData';\nimport * as AppActions from '../actions/AppActions';\nimport AppStore from '../stores/AppStore';\nimport { addClass, removeClass } from '../utility/domUtils';\nimport {\n isExternalFlow,\n isCampaigns,\n} from '../utility/productIntegrationUtils';\nimport isEmpty from 'lodash/isEmpty';\nimport { EVENT_NAME } from '../utility/constants';\nimport { IconButton, TextArea, BodyText } from '@paypalcorp/pp-react';\nimport NoteFieldError from './NoteFieldError';\nimport { trackLinkClick } from '../fpti/fpti';\nimport { LINK_NAME } from '../fpti/fptiConstants';\n\nlet messages = localsMessages('common/note');\nconst MAX_CHAR_LIMIT = 250;\n\nfunction NoteComponent(props) {\n let {\n label = '',\n error: { lengthLimit = '' } = {},\n campaigns: { label: campaignsLabel = '' } = {},\n } = messages.note;\n\n let providedLabel = isCampaigns() ? campaignsLabel : label;\n if (templateData.charityNoteEnabled && templateData.charityNoteLabel) {\n providedLabel = templateData.charityNoteLabel;\n }\n\n if (props.label) {\n providedLabel = props.label;\n }\n\n const [donationNote, setDonationNote] = useState(\n AppStore.getDonationNote() || templateData.donationNote || ''\n );\n const initialNoteLabel = isEmpty(donationNote) ? providedLabel : donationNote;\n\n const [showLabel, setShowLabel] = useState(true);\n const [showError, setShowError] = useState(false);\n const [noteLabel, setNoteLabel] = useState(initialNoteLabel);\n const textAreaEl = useRef(null);\n\n const isNoteTextPresent = donationNote.length > 0 ? true : false;\n\n useEffect(() => {\n if (!showLabel && !isEmpty(textAreaEl)) {\n textAreaEl.current.focus();\n }\n }, [showLabel]);\n useEffect(() => {\n if (isNoteTextPresent) {\n setShowLabel(false);\n }\n }, []);\n useEffect(() => {\n if (props.isNotePreview) {\n setNoteLabel(initialNoteLabel);\n }\n }, [initialNoteLabel]);\n\n const directionality = templateData.contextLocalityDir;\n\n const handleClick = () => {\n trackLinkClick(LINK_NAME.NOTE_PAD, {\n eventName: isExternalFlow()\n ? EVENT_NAME.DW_GIVING_DONATE_SETUP_COMMENT_PRESSED\n : '',\n });\n setShowLabel(false);\n };\n\n const handleBlur = (event) => {\n const note = event.target.value;\n\n // Remove all whitespaces\n if (!isEmpty(note) && !isEmpty(note.trim())) {\n AppActions.changeNote({ note });\n setNoteLabel(note);\n } else {\n AppActions.changeNote({ note: '' });\n setNoteLabel(providedLabel);\n setShowLabel(true);\n }\n };\n\n const showNoteFieldError = () => {\n setShowError(true);\n };\n\n const hideNoteFieldError = () => {\n setShowError(false);\n };\n\n const handleOnChange = (event) => {\n const value = event.target.value;\n setDonationNote(value);\n\n if (value && value.length >= MAX_CHAR_LIMIT) {\n addClass('.note_wrap', ['animated', 'shake']);\n setTimeout(() => {\n removeClass('.note_wrap', ['animated', 'shake']);\n }, 1000);\n showNoteFieldError();\n } else {\n hideNoteFieldError();\n }\n };\n\n return (\n
\n \n {showLabel ? (\n \n ) : (\n
\n \n
\n )}\n\n {showError && showLabel && }\n
\n \n );\n}\n\nNoteComponent.propTypes = {\n label: PropTypes.string,\n isNotePreview: PropTypes.bool,\n};\n\nexport default NoteComponent;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport { Checkbox, Tooltip } from '@paypalcorp/pp-react';\nimport { EVENT_NAME } from '../../utility/constants';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FEATURES, LINK_NAME } from '../../fpti/fptiConstants';\nimport { addFeature } from '../../fpti/helper';\n\nconst AnonymousCheckbox = ({\n content,\n optInStatus,\n handleAnonymousDonationChange,\n}) => {\n useEffect(() => {\n addFeature(FEATURES.ANONYMOUS);\n }, []);\n\n const handleChange = (event) => {\n const isChecked = event.target.checked,\n checkboxStatus = isChecked ? 'checked' : 'unchecked';\n\n AppActions.changeAnonymousStatus({\n anonymousStatus: checkboxStatus,\n });\n\n handleAnonymousDonationChange(isChecked);\n };\n\n const trackTooltipOpen = () => {\n trackLinkClick(LINK_NAME.ANONYMOUS_TOOLTIP, {\n eventName: EVENT_NAME.DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED,\n });\n };\n\n return (\n \n \n )\n }\n />\n \n );\n};\n\nAnonymousCheckbox.propTypes = {\n content: PropTypes.object,\n optInStatus: PropTypes.bool,\n handleAnonymousDonationChange: PropTypes.func,\n};\n\nexport default AnonymousCheckbox;\n","function setDonateLoaded() {\n document.getElementsByTagName('body')[0].setAttribute('donate-loaded', true);\n}\n\nsetDonateLoaded();\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../utility/getTemplateData';\nimport { Button, V2PaypalIcon } from '@paypalcorp/pp-react';\nimport { isExternalFlow } from '../utility/productIntegrationUtils';\nconst messages = localsMessages('common/nextButton');\n\nclass NextButtonComponent extends React.Component {\n render() {\n const buttonnext = messages.button && messages.button.next;\n\n return (\n <>\n {isExternalFlow() ? (\n \n {buttonnext}\n \n ) : (\n \n {buttonnext}\n \n )}\n \n );\n }\n}\n\nNextButtonComponent.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleNext: PropTypes.func,\n};\n\nexport default NextButtonComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { Button } from '@paypalcorp/pp-react';\nconst messages = localsMessages('common/oneTouch');\n\nclass OneTouchNextButton extends React.Component {\n render() {\n const buttonnext = messages.button && messages.button.next;\n\n return (\n \n {buttonnext}\n \n );\n }\n}\n\nOneTouchNextButton.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleNext: PropTypes.func,\n};\n\nexport default OneTouchNextButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../utility/getTemplateData';\nimport { Button } from '@paypalcorp/pp-react';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\nconst messages = localsMessages('guest/guestButton');\n\nclass GuestButton extends React.Component {\n componentDidMount() {\n addFeature(FEATURES.GUEST);\n }\n\n render() {\n const { label: { debitorcredit = '' } = {} } = messages;\n return (\n \n {debitorcredit}\n \n );\n }\n}\n\nGuestButton.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleGuest: PropTypes.func,\n};\n\nexport default GuestButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { BodyText, Alert } from '@paypalcorp/pp-react';\nimport getContent from 'pp-react-l10n';\n\nconst getRecurringInfoContent = getContent('locals')(\n 'common/recurring-checkbox'\n);\n\nexport default function RecurringInfo({ orgName, amount }) {\n return (\n \n \n {getRecurringInfoContent(\n 'rp.helpText1',\n { orgName: orgName, amount: amount },\n { useHTML: true }\n )}\n \n \n );\n}\n\nRecurringInfo.propTypes = {\n orgName: PropTypes.string,\n amount: PropTypes.string,\n};\n","/* eslint-disable */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { StyleSheet, css } from '../../utility/paypalAphrodite';\nimport * as AppActions from '../../actions/AppActions';\nimport AppStore from '../../stores/AppStore';\nimport AppDispatcher from '../../dispatcher/AppDispatcher';\nimport TemplateData, { localsMessages } from '../../utility/getTemplateData';\nimport { isLTR as isLeftToRight } from '../../utility/helper';\nimport { loadBodyMovin } from '../../utility/lazyLoader';\nimport { formatAmount } from '../../utility/formator';\nimport { sanitizeOrgName } from '../../utility/domUtils';\nimport RecurringInfo from './RecurringInfo';\nimport { Checkbox, Tooltip, Modal } from '@paypalcorp/pp-react';\nimport { preventFormSubmitOnTooltipClick } from '../../utility/fixPpReactToolTip';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FEATURES, FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { addFeature } from '../../fpti/helper';\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\nconst isLTR = isLeftToRight();\nlet texts = localsMessages('common/recurring-checkbox');\nlet isContinue = false;\n\nconst styles = StyleSheet.create({\n wrapper: {},\n centered: {\n display: 'flex',\n justifyContent: 'center',\n },\n toolWrapper: {\n display: 'inline-block',\n position: 'relative',\n margin: '0',\n paddingBottom: '10px',\n },\n animationWrapper: {\n width: '100%',\n position: 'absolute',\n height: 125,\n marginTop: -125,\n },\n animationContainer: {\n transform: isLTR ? 'scaleX(1)' : 'scaleX(-1)',\n height: 250,\n width: 250,\n marginLeft: -35,\n },\n recurringButton: {\n width: '100%',\n padding: 20,\n borderRadius: '3rem',\n fontSize: 15,\n marginBottom: 0,\n },\n borderOnly: {\n background: 'transparent',\n color: '#0070ba',\n },\n divider: {\n position: 'relative',\n borderBottom: '1px solid #ccc',\n textAlign: 'center',\n margin: '0 0 20px',\n },\n dividerContent: {\n position: 'relative',\n textAlign: 'center',\n backgroundColor: '#fff',\n display: 'inline-block',\n margin: 0,\n top: 9,\n padding: '0 10px',\n fontSize: 18,\n },\n verticalCentered: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nclass RecurringCheckBox extends React.Component {\n constructor(props) {\n super(props);\n const amount = AppStore.getDonationAmount() || '';\n const currency = AppStore.getDonationCode() || '';\n this.state = {\n showhelp: this.props.status,\n formatedAmount: formatAmount({ currency: currency, value: amount }),\n };\n }\n\n componentDidMount = () => {\n this.dispatcherToken = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_AMOUNT') {\n const { action: { item: { amount = 0 } = {} } = {} } = payload;\n this.updateAmount(amount);\n }\n });\n\n preventFormSubmitOnTooltipClick();\n\n addFeature(FEATURES.RECURRING);\n };\n\n componentWillUnmount = () => {\n isContinue = this.props.continue;\n AppDispatcher.unregister(this.dispatcherToken);\n };\n\n loadAnimation(display) {\n if (!display) {\n return;\n }\n loadBodyMovin().then(() => {\n // Animation is displayed after bodymovin files are downloaded\n // On slow connections, user may click the checkbox a few times before\n // the JS files are downloaded\n if (this.state.isAnimating) {\n return;\n }\n const animationData = window.heartsAnimationData;\n const bodymovinLibrary = window.bodymovin;\n if (!bodymovinLibrary || !animationData) {\n return;\n }\n this.setState({\n isAnimating: true,\n });\n\n bodymovinLibrary.loadAnimation({\n // eslint-disable-line\n container: document.getElementById('animationContainer'),\n renderer: 'svg',\n loop: 1,\n autoplay: true,\n animationData,\n });\n // Destroying with timeout\n setTimeout(() => {\n bodymovinLibrary.destroy(); // eslint-disable-line\n this.setState({\n isAnimating: false,\n });\n }, 1000);\n });\n }\n\n updateAmount = (value) => {\n const currency = AppStore.getDonationCode() || '';\n this.setState({ formatedAmount: formatAmount({ currency, value }) });\n };\n\n handleChange = (ev) => {\n let { showhelp } = this.state;\n let isChecked = ev.target.checked;\n let chkBxStatus = isChecked ? 'checked' : 'unchecked';\n\n this.loadAnimation(isChecked);\n\n AppActions.changeRecurring({\n recurring: chkBxStatus,\n });\n\n trackLinkClick(LINK_NAME.RECURRING_CHECKBOX, {\n additionalData: {\n [FPTI_TAGS.CHECKBOX]: chkBxStatus,\n },\n });\n\n this.props.handleChange(isChecked);\n\n this.setState({ showhelp: (showhelp = !showhelp) });\n };\n\n createMarkup = (content) => {\n return { __html: content };\n };\n\n render() {\n let { recurring_label: recurringLabel, perMonth } = texts.rp;\n\n const checked = { checked: false };\n if (this.props.status) {\n checked.checked = true;\n }\n\n return (\n \n \n \n
\n {isContinue ? (\n
\n {perMonth}\n
\n ) : (\n
\n
\n \n
\n
\n
\n \n
\n
\n \n )}\n \n \n {this.props.status && !isContinue && (\n \n \n \n )}\n \n
\n );\n }\n}\n\nRecurringCheckBox.propTypes = {\n handleChange: PropTypes.func,\n status: PropTypes.bool,\n continue: PropTypes.bool,\n};\n\nRecurringCheckBox.defaultProps = {\n handleChange: () => {},\n};\n\nexport default RecurringCheckBox;\n","export function preventFormSubmitOnTooltipClick() {\n let tooltipButton = document.getElementsByClassName('ppvx_tooltip__icon');\n Object.values(tooltipButton).map((btn) => {\n btn.type = 'button';\n });\n}\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { DropdownMenu } from '@paypalcorp/pp-react-dropdown-menu';\nimport * as AppActions from '../../actions/AppActions';\nimport appStore from '../../stores/AppStore';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nconst messages = localsMessages('common/programs');\n\nconst Programs = ({ programNames, isDisabled }) => {\n const [selectedIdx, handleSelect] = useState(0);\n\n // programNames is coming as a string sometimes\n // Convert it to an array\n if (programNames && !Array.isArray(programNames)) {\n programNames = [programNames];\n }\n\n const getProgramOptions = () => {\n const options = [];\n programNames.forEach((programName) => {\n options.push({\n primaryText: programName,\n });\n });\n\n return options;\n };\n\n const updateProgramId = (index) => {\n handleSelect(index);\n const selectedProgram = index === -1 ? '' : programNames[index];\n AppActions.updateSelectedProgram(selectedProgram);\n trackLinkClick(LINK_NAME.PROGRAM_SELECTED, {\n additionalData: {\n [FPTI_TAGS.CAMPAIGN]: selectedProgram,\n },\n });\n };\n\n useEffect(() => {\n let programOption = getProgramOptions().findIndex(\n (program) => program.primaryText === appStore.getSelectedProgram()\n );\n programOption = programOption === -1 ? 0 : programOption;\n handleSelect(programOption);\n AppActions.updateSelectedProgram(programNames[programOption]);\n }, []);\n\n return (\n \n );\n};\n\nPrograms.propTypes = {\n programNames: PropTypes.array,\n isDisabled: PropTypes.bool,\n};\n\nexport default Programs;\n","import React, { Component } from 'react';\nimport { Button, Sheet, HeadingText, BodyText } from '@paypalcorp/pp-react';\nimport TemplateData, { localsMessages } from '../../utility/getTemplateData';\nimport PropTypes from 'prop-types';\nimport { appendCdnHostName } from '../../utility/geoUtils';\nimport { sanitizeOrgName } from '../../utility/domUtils';\nimport BackButton from '../../components/BackButton';\nimport { isInContext } from '../../utility/inContextDonation';\nimport { Row, Col } from '@paypalcorp/pp-react';\n\nlet texts = localsMessages('common/recurring-checkbox');\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\n\nexport class RecurringOverlay extends Component {\n handleClose = () => {\n this.props.closeRecurringOverlay();\n };\n\n noThanks_closeModal = (event) => {\n this.props.onMakeOneTimeDonation();\n };\n\n onContinue = (event) => {\n this.props.onContinue();\n };\n\n render() {\n let {\n rp: {\n signupHeader,\n dialogp1,\n dialogp2,\n dialogp3,\n dialogp2Week,\n dialogp2Year,\n continueBtn,\n noThanksBtn,\n } = {},\n } = texts || {};\n\n dialogp1 =\n dialogp1 && dialogp1.replace('{orgName}', sanitizeOrgName(orgname));\n let secondDialog = dialogp2;\n\n switch (this.props.selectedRecurringFrequency) {\n case 'WEEK':\n secondDialog = dialogp2Week;\n break;\n case 'YEAR':\n secondDialog = dialogp2Year;\n break;\n default:\n secondDialog = dialogp2;\n break;\n }\n\n secondDialog =\n secondDialog &&\n secondDialog.replace('{orgName}', sanitizeOrgName(orgname));\n\n return (\n : null\n }\n noCloseButton={isInContext()}\n isOpen={this.props.isOpen}\n onClose={this.handleClose}\n closeOnBackgroundClick={false}\n className=\"recurring-signup-overpanel\"\n containerClassName={`${\n isInContext() ? 'incontext-guest-recurring' : ''\n }`}\n >\n
\n
\n \n \n
\n \n
\n \n
\n \n \n {signupHeader}\n \n \n\n \n \n
\n
\n
\n {dialogp1}\n
\n
\n
\n {secondDialog}\n
\n
\n
\n {dialogp3}\n
\n
\n \n
\n\n
\n \n \n \n \n \n\n \n \n \n {noThanksBtn}\n \n \n \n
\n
\n
\n \n );\n }\n}\n\nRecurringOverlay.propTypes = {\n closeRecurringOverlay: PropTypes.func,\n onMakeOneTimeDonation: PropTypes.func,\n onContinue: PropTypes.func,\n isOpen: PropTypes.bool,\n selectedRecurringFrequency: PropTypes.string,\n};\n\nexport default RecurringOverlay;\n","import React, { useEffect, useState } from 'react';\nimport { CaptionText } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from 'aphrodite';\nimport { localsMessages } from '../utility/getTemplateData';\nimport AppDispatcher from '../dispatcher/AppDispatcher';\nimport * as AppConstants from '../utility/constants';\n\nconst messages = localsMessages('buttons/partner') || {};\n\nconst styles = StyleSheet.create({\n disclaimerWrapper: {\n maxWidth: 350,\n margin: 'auto',\n '.ppvx_accordion__row': { border: 'none' },\n },\n disclaimer: {\n margin: 'auto',\n },\n disclaimerCaptionText: {\n marginTop: 12,\n color: '#687173',\n textAlign: 'center',\n },\n});\n\nexport default function NotTaxDeductibleLegalText() {\n const [isPPCC, setIsPPCC] = useState(undefined);\n let dispatcherMessages;\n const registerAppDispatcherMessages = () => {\n dispatcherMessages = AppDispatcher.register((payload) => {\n if (\n payload.action &&\n payload.action.actionType === AppConstants.UPDATE_PPCC_STATUS\n ) {\n setIsPPCC(payload.action.item);\n }\n });\n };\n\n useEffect(() => {\n registerAppDispatcherMessages();\n return function cleanup() {\n AppDispatcher.unregister(dispatcherMessages);\n };\n }, []);\n if (isPPCC || isPPCC === undefined) return null;\n return (\n
\n \n {messages.landing.mayNotBeTaxDeductible}\n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport getContent from 'pp-react-l10n';\nimport { DonateCheckbox } from '@paypalcorp/donate-react';\nimport { addFeature } from '../../fpti/helper';\nimport { FEATURES } from '../../fpti/fptiConstants';\n\nconst CoverFeeCheckbox = ({\n handleCoverFeeChange,\n optInStatus,\n formatedFeeAmount,\n isDisabled,\n}) => {\n const handleChange = (event) => {\n const isChecked = event.target.checked,\n checkboxStatus = isChecked ? 'checked' : 'unchecked';\n\n AppActions.changeCoverFee({\n coverFee: checkboxStatus,\n });\n\n handleCoverFeeChange(isChecked);\n };\n\n useEffect(() => {\n addFeature(FEATURES.CTF);\n }, []);\n\n return (\n \n );\n};\n\nCoverFeeCheckbox.propTypes = {\n handleCoverFeeChange: PropTypes.func,\n optInStatus: PropTypes.bool,\n formatedFeeAmount: PropTypes.string,\n isDisabled: PropTypes.bool,\n};\n\nexport default CoverFeeCheckbox;\n","import React from 'react';\nimport '../../utility/csrf';\nimport AmountWrapper from '../../components/amountWrapper';\nimport NextButton from '../../components/nextButton';\nimport OneTouchNextButton from '../../components/landing/OneTouchNextButton';\nimport CancelAndReturn from '../../components/cancelAndReturn';\nimport GuestButton from '../../components/guestButton';\nimport RecurringCheckBox from '../../components/recurring-checkbox/recurring-checkbox';\nimport UserDetailsBanner from '../../components/onetouch/UserDetailsBanner';\nimport OfferDetail from '../../components/offerDetail';\nimport Disclaimer from '../../components/Disclaimer';\nimport VoucherFlowDisclaimer from '../../components/voucherFlowDisclaimer';\nimport CloseButton from '../../components/CloseButton';\nimport ReceiverEligibilityErrorTile from '../error/receiverEligibilityError';\nimport { formatAmount, normalizeNumber } from '../../utility/formator';\nimport {\n isInContext,\n isMobileOrInContext,\n} from '../../utility/inContextDonation';\nimport DonateHeader from '../../components/common/DonateHeader';\n\nimport templateData from '../../utility/getTemplateData';\nimport {\n hasPersonalizedMessages,\n getPersonalizedMessages,\n} from '../../utility/personalizedMessages';\n\nimport AppStore from '../../stores/AppStore';\nimport * as AppActions from '../../actions/AppActions';\nimport AppDispatcher from '../../dispatcher/AppDispatcher';\nimport * as cpl from '../../utility/cpl';\nimport { GN_CONTENT_TOUCHPOINT } from '../../utility/constants';\n\nimport {\n handleLogIn,\n addShake,\n handleTokenReuse,\n hideSpinnerOverlay,\n showSpinnerOverlay,\n} from '../../utility/helper';\nimport {\n isAuthenticatedUser,\n shouldShowUserBanner,\n isLoggedInUser,\n} from '../../utility/authUtils';\nimport * as amountUtils from '../../components/amount/amountUtils';\n\nimport { withRouter } from 'react-router-dom';\nimport {\n localsMessages,\n isOldButtonFactory,\n hasPartnerSource,\n} from '../../utility/getTemplateData';\nimport { isCampaigns } from '../../utility/productIntegrationUtils';\nimport { loadBodyMovin, waitForOnload } from '../../utility/lazyLoader';\nimport _isEmpty from 'lodash/isEmpty';\nimport Programs from '../../components/programs/Programs';\nimport RecurringOverlay from '../../components/recurring-checkbox/RecurringOverlay';\nimport _get from 'lodash/get';\nimport NotTaxDeductibleLegalText from '../../components/NotTaxDeductibleLegalText';\nimport { getParameterByName } from '../../utility/queryStringHelper';\nimport CoverFeeCheckbox from '../../components/coverFee/coverFeeCheckbox';\nimport {\n computeAmountAfterFee,\n isOptInCoverFee,\n restoreDonationAmount,\n updateDonationAmount,\n setFeeAmountInStore,\n} from '../../components/coverFee/feeUtils';\nimport withDonate from '../../components/guest/WithDonate';\nimport withTheme from '../../components/withTheme';\nimport AnonymousCheckbox from '../../components/anonymousDonation/anonymousCheckbox';\nimport {\n getPersonalizedAnonymousContent,\n getPersonalizedNoteToPayeeLabel,\n isCheckoutRail,\n isExternalFlow,\n prepareOrderParams,\n} from '../../utility/productIntegrationUtils';\nimport NoteComponent from '../../components/note';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n trackAnonymousCheckboxClick,\n trackCoverFeeCheckboxClick,\n trackDonateWithCardClick,\n trackDonateWithPayPalClick,\n trackLandingPageIM,\n trackNextClickForCheckout,\n trackRecurringFrequencySelectionClick,\n} from '../../fpti/fpti';\nimport { CPL_PAGE_SPEC, FEATURES } from '../../fpti/fptiConstants';\nimport classNames from 'classnames';\nimport {\n BodyText,\n HeadingText,\n CaptionText,\n SegmentedController,\n SegmentedControllerPanel,\n} from '@paypalcorp/pp-react';\nimport getContent from 'pp-react-l10n';\nimport { addFeature } from '../../fpti/helper';\n\nconst messages = localsMessages('common/amount');\nconst errorMessages = localsMessages('errors/landingerror');\nconst MERCHANT_PPCC_CONFIRMED_STATUS = 'CONFIRMED';\nconst getCampaignContent = getContent('locals')('landing')('campaigns');\nconst getRecurringFrequencyContent = getContent('locals')(\n 'common/recurring-checkbox'\n)('rp.frequency');\n\nclass LandingPageComponent extends React.Component {\n constructor(props) {\n super(props);\n const optInStatus = AppStore.getCoverFeeOptInStatus();\n const anonymousStatusInStore = AppStore.getAnonymousStatus();\n const anonymousOptInStatus = !isEmpty(anonymousStatusInStore)\n ? anonymousStatusInStore === 'checked'\n : templateData.anonymousStatus || false;\n\n this.state = {\n hasLogo: templateData.hasLogo,\n subHeaderLabel: templateData.donationName,\n orgName: templateData.charityName,\n donationId: templateData.donationId,\n guestRedirectUrl: templateData.guestRedirectUrl,\n donateDisabled: false,\n recurringEnabled: templateData.recurringEnabled,\n recurringStatus: templateData.recurringStatus === 'checked',\n supportedRecurringFrequencies: templateData.supportedRecurringFrequencies,\n recurringHelpText: '',\n recurringLabel: 'Make this a monthly donation',\n rpContinue: false,\n isAuthenticated: isAuthenticatedUser(),\n memberMandatory: templateData.memberMandatory,\n programNames:\n templateData.donateContext?.program_names || templateData.programNames,\n isRecurringOverlayOpen: false,\n isVoucherFlow: templateData.isVoucherFlow,\n offerProgram: templateData.offerProgram,\n coverFeeEnabled: templateData.coverFeeEnabled,\n coverFeeOptInStatus:\n optInStatus !== undefined\n ? optInStatus === 'checked'\n : templateData.feePayer === 'consumer',\n feeAmount: '',\n formatedFeeAmount: '',\n anonymousEnabled: templateData.anonymousEnabled,\n anonymousOptInStatus,\n hasDisclaimer: hasPersonalizedMessages(GN_CONTENT_TOUCHPOINT),\n selectedTabIdx: 0,\n };\n }\n\n componentDidMount = () => {\n window.onload = function () {\n setTimeout(function () {\n cpl.logPerformance(CPL_PAGE_SPEC.LANDING_PAGE);\n }, 0);\n };\n\n AppActions.updateCurrentPage({ currentPage: 'landing' });\n\n // Do not hide spinner if coming to page with already completed payment token\n if (templateData.paymentStatus !== 'complete') {\n hideSpinnerOverlay();\n }\n\n // Checking for recurring status if coming from guest page\n if (AppStore.getDonationRecurring() === 'checked') {\n this.setState({ recurringStatus: true });\n }\n\n // Checking for cover fee preference if coming from guest page\n if (isOptInCoverFee()) {\n this.setState({ coverFeeOptInStatus: true });\n restoreDonationAmount();\n }\n\n setFeeAmountInStore();\n this.updateFeeAmount();\n\n trackLandingPageIM({ noteFieldDisplayed: this.shouldShowNote() });\n\n // Pre-load bodyMovin\n if (templateData.recurringEnabled) {\n waitForOnload().then(() => {\n loadBodyMovin();\n });\n }\n\n if (!isLoggedInUser()) {\n AppActions.showLanguageSelector(true);\n }\n\n // Register for App Dispatcher Messages\n this.registerAppDispatcherMessages();\n };\n\n componentWillUnmount() {\n AppDispatcher.unregister(this.dispatcherMessages);\n }\n\n registerAppDispatcherMessages = () => {\n this.dispatcherMessages = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_RECURRING') {\n const checked = _get(payload.action, 'item', 'unchecked');\n this.setState({\n recurringStatus: checked === 'checked',\n });\n }\n });\n };\n\n getFPTDATA = () => {\n return {\n amount: AppStore.getDonationAmount(),\n code: AppStore.getDonationCode(),\n symbol: AppStore.getDonationSymbol(),\n };\n };\n\n validateAmountAndNavigateToGuestPage = () => {\n let donationAmount = AppStore.getDonationAmount();\n\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n trackDonateWithCardClick({\n noteFieldDisplayed: this.shouldShowNote(),\n fptiData: {\n is_recurring: this.state.recurringStatus ? 'on' : 'off',\n fee_type: this.state.coverFeeEnabled ? 'offset' : 'none',\n },\n });\n this.props.history.push(`/donate/guest?token=${templateData.token}`);\n } else {\n addShake();\n }\n };\n\n handleGuest = (event) => {\n event.preventDefault();\n AppActions.changeRecurringModalStatus({\n recurringModalStatus: 'notclosed',\n });\n let donationAmount = this.getDonationAmount();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n const isRecurringChecked = this.state.recurringStatus;\n\n if (isRecurringChecked && !this.state.memberMandatory) {\n this.openRecurringOverlay();\n } else {\n this.validateAmountAndNavigateToGuestPage();\n }\n\n // Start CPL tracking to get measurements to load guest form\n window.PAYPAL.analytics.startCPLTracking({\n page: 'main:donate:wps:guest:guestform:guestFormComponent:web::',\n action: 'guest_form_loaded',\n uicomp: 'guestForm',\n uitype: 'component',\n });\n }\n };\n\n handleNext = (event) => {\n event.preventDefault();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n let donationAmount = this.getDonationAmount();\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n trackDonateWithPayPalClick({\n noteFieldDisplayed: this.shouldShowNote(),\n fptiData: {\n is_recurring: this.state.recurringStatus ? 'on' : 'off',\n fee_type: this.state.coverFeeEnabled ? 'offset' : 'none',\n },\n });\n handleLogIn();\n }\n };\n\n handleNextForCheckout = (event) => {\n event.preventDefault();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n trackNextClickForCheckout({ noteFieldDisplayed: this.shouldShowNote() });\n showSpinnerOverlay();\n const orderParams = prepareOrderParams();\n this.props.createOrder(orderParams);\n };\n\n getDonationAmount = () => {\n let donationAmount = AppStore.getDonationAmount();\n\n if (isOptInCoverFee()) {\n const feeAmount = AppStore.getFeeAmount();\n // backup user's original entered amount in store\n AppActions.changeAmountBeforeFee({ amountBeforeFee: donationAmount });\n\n if (feeAmount) {\n donationAmount = computeAmountAfterFee(donationAmount, feeAmount);\n updateDonationAmount(donationAmount);\n }\n }\n\n return donationAmount;\n };\n\n hideValidationError = () => {\n this.setState({\n showValidationError: false,\n });\n };\n\n validateDonationAmount = () => {\n let validationResult = amountUtils.validateMinimumDonationAmount(messages);\n if (validationResult?.showValidationError) {\n this.setState(validationResult);\n addShake();\n return false;\n }\n\n validationResult = amountUtils.validateMaximumDonationAmount();\n if (validationResult?.showValidationError) {\n this.setState(validationResult);\n addShake();\n return false;\n }\n\n this.setState(validationResult);\n return true;\n };\n\n handleAmountFocus = () => {\n if (this.state.showValidationError) {\n this.hideValidationError();\n }\n };\n\n updateConversionSataus = (status = false) => {\n this.setState({ donateDisabled: status });\n };\n\n handleRecurringChange = (status = false) => {\n this.setState({ recurringStatus: status });\n };\n\n handleRecurringOverlayContinue = () => {\n this.setState({ rpContinue: true });\n this.validateAmountAndNavigateToGuestPage();\n };\n\n handleRecurringOverlayMakeOneTimeDonation = () => {\n AppActions.changeRecurring({\n recurring: 'unchecked',\n });\n this.validateAmountAndNavigateToGuestPage();\n };\n\n handleAnonymousDonationChange = (status = false) => {\n this.setState({ anonymousOptInStatus: status });\n trackAnonymousCheckboxClick(status);\n };\n\n handleCoverFeeChange = (status = false) => {\n this.setState({ coverFeeOptInStatus: status });\n trackCoverFeeCheckboxClick(status);\n };\n\n updateFeeAmount = () => {\n this.setState({\n feeAmount: AppStore.getFeeAmount(),\n formatedFeeAmount: AppStore.getFormatedFeeAmount(),\n });\n };\n\n openRecurringOverlay = () => {\n this.setState({\n isRecurringOverlayOpen: true,\n });\n };\n\n closeRecurringOverlay = () => {\n this.setState({\n isRecurringOverlayOpen: false,\n });\n };\n\n renderProgramsDropdown = () => {\n if (isOldButtonFactory() || _isEmpty(this.state.programNames)) {\n return null;\n }\n\n return ;\n };\n\n renderDisclaimer = () => {\n if (\n this.state.supportedRecurringFrequencies &&\n this.state.supportedRecurringFrequencies[this.state.selectedTabIdx] ===\n 'ONE_TIME'\n ) {\n return null;\n }\n let rpContentHelper = null;\n switch (\n this.state.supportedRecurringFrequencies &&\n this.state.supportedRecurringFrequencies[this.state.selectedTabIdx]\n ) {\n case 'WEEK':\n rpContentHelper = 'helpText1Week';\n break;\n case 'MONTH':\n rpContentHelper = 'helpText1Month';\n break;\n case 'YEAR':\n rpContentHelper = 'helpText1Year';\n break;\n default:\n rpContentHelper = null;\n break;\n }\n\n if (rpContentHelper) {\n let totalAmount = 0;\n if (this.state.coverFeeOptInStatus) {\n totalAmount =\n +normalizeNumber(AppStore.getDonationAmount()) +\n +normalizeNumber(AppStore.getFeeAmount());\n } else {\n totalAmount = +normalizeNumber(AppStore.getDonationAmount());\n }\n\n const formattedTotalAmount = formatAmount({\n currency: templateData.donationCode,\n value: totalAmount,\n });\n\n return (\n \n {getContent('locals')('common/recurring-checkbox')(\n `rp.${rpContentHelper}`,\n {\n orgName: this.state.subHeaderLabel,\n amount: formattedTotalAmount,\n },\n { useHTML: true }\n )}\n \n );\n }\n return null;\n };\n\n renderDonateButtons = () => {\n if (isCheckoutRail()) {\n return (\n \n );\n }\n\n if (this.state.isAuthenticated) {\n return (\n \n );\n }\n\n return (\n
\n
\n \n
\n \n
\n );\n };\n\n /**\n * Should show note on landing page when charityNote is enabled\n * and recurring is disabled for client flows\n * @return {Boolean} true to show note field\n */\n shouldShowNote = () => {\n const showNoteCondition =\n templateData.charityNoteEnabled &&\n !this.state.recurringStatus &&\n isExternalFlow();\n\n if (showNoteCondition) {\n addFeature(FEATURES.CHARITY_NOTE);\n }\n\n return showNoteCondition;\n };\n\n getPersonalizedContent = () => {\n if (isExternalFlow()) {\n const personalizedMessages = getPersonalizedMessages(\n GN_CONTENT_TOUCHPOINT\n );\n return personalizedMessages?.disclaimer;\n }\n };\n\n landingClass() {\n return classNames({\n gn_donate_wrapper: templateData.bannerUrl,\n donate_wrapper: !templateData.bannerUrl,\n context_gn_wrapper: isInContext(),\n 'user-banner': shouldShowUserBanner(),\n mobile_view: isMobileOrInContext(),\n });\n }\n\n shouldShowSupportText = () => {\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n return (\n campaignStatus === 'INACTIVE' &&\n +amountRaised >= +templateData.campaignTargetAmount\n );\n };\n\n shouldShowNoDonationText = () => {\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n return (\n campaignStatus === 'INACTIVE' &&\n ((!templateData.campaignEndTime && amountRaised === '0') ||\n templateData.campaignEndTime !== '')\n );\n };\n\n selectFrequencyTab = (e, tabIdx) => {\n let selectedRecurringFrequency = '';\n switch (this.state.supportedRecurringFrequencies[tabIdx]) {\n case 'ONE_TIME':\n selectedRecurringFrequency = null;\n break;\n case 'WEEK':\n selectedRecurringFrequency = 'Week';\n break;\n case 'MONTH':\n selectedRecurringFrequency = 'Month';\n break;\n case 'YEAR':\n selectedRecurringFrequency = 'Year';\n break;\n }\n AppActions.changeSelectedRecurringFrequency({ selectedRecurringFrequency });\n if (this.state.supportedRecurringFrequencies[tabIdx] === 'ONE_TIME') {\n AppActions.changeRecurring({\n recurring: 'unchecked',\n });\n } else {\n AppActions.changeRecurring({\n recurring: 'checked',\n });\n this.handleRecurringChange(true);\n }\n this.setState({ selectedTabIdx: tabIdx });\n trackRecurringFrequencySelectionClick();\n };\n\n render() {\n const showUserBanner = shouldShowUserBanner();\n const showSupportText = this.shouldShowSupportText();\n const showNoDonationText = this.shouldShowNoDonationText();\n\n const supportedRecurringFrequencies =\n this.state.supportedRecurringFrequencies?.map((freq) => {\n switch (freq) {\n case 'ONE_TIME':\n return getRecurringFrequencyContent('oneTime');\n case 'WEEK':\n return getRecurringFrequencyContent('weekly');\n case 'YEAR':\n return getRecurringFrequencyContent('yearly');\n default:\n return getRecurringFrequencyContent('monthly');\n }\n }) || [];\n\n if (!templateData.receiverCountryEligible) {\n return (\n \n \n \n );\n }\n\n return (\n
\n
\n {showUserBanner && !showNoDonationText && !showSupportText ? (\n \n ) : null}\n {isExternalFlow() && }\n \n {(() => {\n switch (true) {\n case showSupportText:\n return (\n \n {getCampaignContent('supportText')}\n \n );\n case showNoDonationText:\n return (\n \n {getCampaignContent('noDonationText')}\n \n );\n default:\n return (\n \n {supportedRecurringFrequencies &&\n supportedRecurringFrequencies.length > 1 && (\n ({\n label: option,\n id: `${option}-id`,\n panelId: `${option}-panelid`,\n }))}\n onClick={this.selectFrequencyTab}\n className=\"frequency-options\"\n >\n {supportedRecurringFrequencies.map((option) => (\n \n ))}\n \n )}\n\n \n {this.renderProgramsDropdown()}\n {!isCampaigns() && this.state.anonymousEnabled && (\n \n )}\n {this.shouldShowNote() && (\n \n )}\n {this.state.coverFeeEnabled && (\n \n )}\n {this.state.recurringEnabled &&\n supportedRecurringFrequencies.length == 0 && (\n \n )}\n {this.state.isVoucherFlow && (\n \n )}\n {this.renderDisclaimer()}\n {this.renderDonateButtons()}\n {this.state.isVoucherFlow && }\n {hasPartnerSource() && !this.state.isVoucherFlow && (\n \n )}\n \n {this.state.hasDisclaimer && (\n \n )}\n
\n );\n }\n })()}\n
\n \n \n );\n }\n}\n\nconst LandingPage = withRouter(withDonate(withTheme(LandingPageComponent)));\n\nclass Landing extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n displayLanding: !templateData.currentState,\n };\n }\n\n /**\n * For DIRECT(nonWebscr) and POST integrations, there will not be a token in the URL\n * This will break page refresh.\n * Hence adding token here\n */\n addTokenToUrlIfMissing() {\n const token = getParameterByName('token');\n const business = getParameterByName('business');\n const hostedButtonId = getParameterByName('hosted_button_id');\n const campaignId = getParameterByName('campaign_id');\n\n if (!token && !business && !hostedButtonId && !campaignId) {\n this.props.history.replace({\n pathname: '/donate',\n search: `?token=${templateData.token}`,\n });\n }\n }\n\n componentDidMount() {\n if (!this.state.displayLanding) {\n this.props.history.push(templateData.currentState);\n } else {\n handleTokenReuse();\n }\n this.addTokenToUrlIfMissing();\n }\n\n render() {\n return
{this.state.displayLanding ? : null}
;\n }\n}\n\nexport default withRouter(Landing);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AvatarStack } from '@paypalcorp/pp-react';\nimport { DonorAvatar } from '@paypalcorp/donate-react';\nimport getContent from 'pp-react-l10n';\nimport _isEmpty from 'lodash/isEmpty';\n\nconst WhosDonatedBanner = ({\n numberOfContributors,\n contributionsList,\n isLoading,\n}) => {\n const getCampaignContent = getContent('locals')('landing')('campaigns');\n let label;\n\n if (numberOfContributors === 1) {\n const donorName = contributionsList?.[0]?.donor_name;\n const donatedAmount = contributionsList?.[0]?.amount;\n // checking for anonymous contributor\n label = _isEmpty(donorName)\n ? getCampaignContent('oneAnonymousDonorMessage')\n : getCampaignContent('oneDonorMessage', {\n donor: donorName,\n amount: donatedAmount,\n });\n } else if (numberOfContributors === 2) {\n const donorOneName = contributionsList?.[0]?.donor_name;\n const donorTwoName = contributionsList?.[1]?.donor_name;\n // checking if any one of contributors is an anonymous contributor\n label =\n _isEmpty(donorOneName) || _isEmpty(donorTwoName)\n ? getCampaignContent('donorMessage', {\n numberOfContributors: numberOfContributors,\n })\n : getCampaignContent('twoDonorsMessage', {\n donorOneName: donorOneName,\n donorTwoName: donorTwoName,\n });\n } else {\n label = getCampaignContent('donorMessage', {\n numberOfContributors: numberOfContributors,\n });\n contributionsList = contributionsList.slice(0, 3);\n }\n return (\n <>\n {!isLoading && contributionsList?.length > 0 && (\n \n {contributionsList.map((data, index) => {\n const showAnonymousAvatar = !data.shareDonorInfo;\n return (\n \n );\n })}\n \n )}\n \n );\n};\n\nWhosDonatedBanner.propTypes = {\n numberOfContributors: PropTypes.number,\n contributionsList: PropTypes.array,\n isLoading: PropTypes.bool,\n};\n\nexport default WhosDonatedBanner;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport useInterval from './hooks/useInterval';\nimport { formatAmount, formatNumber } from '../utility/formator';\nimport { BodyText } from '@paypalcorp/pp-react';\nimport { DonorAvatar } from '@paypalcorp/donate-react';\nimport getContent from 'pp-react-l10n';\n\nconst getFlyoutContent = getContent('locals')('landing')('campaigns')('flyout');\n\nfunction getRandomInt(max) {\n return Math.floor(Math.random() * max);\n}\n\nfunction Flyout({ contributionsList }) {\n const [startShowing, setStartShowing] = useState(false);\n const [showFlyouts, setShowFlyouts] = useState(false);\n const [randomContribution, setRandomContribution] = useState({});\n\n function getRandomContribution() {\n return contributionsList[getRandomInt(contributionsList.length)];\n }\n\n // Start showing flyouts after 10s\n useEffect(() => {\n const flyoutTimer = setTimeout(() => {\n setStartShowing(true);\n setShowFlyouts(true);\n setRandomContribution(getRandomContribution());\n }, 10000);\n return () => clearTimeout(flyoutTimer);\n }, []);\n\n // Get a new contribution and show flyout every 90s\n // Needs useInterval so that the contributionsList gets updated when more are loaded\n useInterval(\n () => {\n setShowFlyouts(true);\n setRandomContribution(getRandomContribution());\n },\n startShowing ? 90000 : null\n );\n\n // Hide flyout every 10s after setting showFlyouts to true\n useEffect(() => {\n if (showFlyouts) {\n const hideInterval = setTimeout(() => {\n setShowFlyouts(false);\n }, 10000);\n return () => clearTimeout(hideInterval);\n }\n }, [showFlyouts]);\n\n function getFlyoutText() {\n if (randomContribution.donor_name) {\n return getFlyoutContent(\n 'contribution',\n {\n donorName: randomContribution.donor_name,\n amount: formatAmount({\n value: formatNumber(randomContribution.amount),\n currency: randomContribution.currency_code,\n }),\n },\n { useHTML: true }\n );\n } else if (randomContribution.shareDonorInfo === false) {\n return getFlyoutContent(\n 'anonymous',\n {\n amount: formatAmount({\n value: formatNumber(randomContribution.amount),\n currency: randomContribution.currency_code,\n }),\n },\n { useHTML: true }\n );\n }\n }\n\n if (!startShowing || isEmpty(randomContribution)) {\n return null;\n }\n\n return (\n
\n
\n \n
\n {getFlyoutText()}\n
\n );\n}\n\nFlyout.propTypes = {\n contributionsList: PropTypes.array,\n};\n\nexport default Flyout;\n","import React, { useRef, useEffect } from 'react';\n\nexport default function useInterval(callback, delay) {\n const intervalRef = useRef(null);\n const savedCallback = useRef(callback);\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n const tick = () => savedCallback.current();\n if (typeof delay === 'number') {\n intervalRef.current = window.setInterval(tick, delay);\n return () => window.clearInterval(intervalRef.current);\n }\n }, [delay]);\n return intervalRef;\n}\n","/*\n Regular order is: SELF > TOP > FIRST.\n For donations > 10, TOP should be shown, if is the same person as SELF or FIRST then display TOP only\n For donations <= 10, if SELF is the same person as FIRST then FIRST should displayed only\n*/\nexport function formatFeatured(contributions, totalContributions) {\n let formattedList = [];\n\n if (contributions.length === 0) {\n return formattedList;\n }\n\n const first = contributions.find((c) => c.badge.toUpperCase() === 'FIRST');\n const top = contributions.find((c) => c.badge.toUpperCase() === 'TOP');\n const selfItem = contributions.find((c) => c.badge.toUpperCase() === 'SELF');\n\n if (selfItem) {\n if (selfItem?.id !== top?.id && selfItem?.id !== first?.id) {\n formattedList.push(selfItem);\n }\n }\n if (top && totalContributions > 10) {\n formattedList.push(top);\n }\n if (first) {\n if (first?.id !== top?.id) {\n formattedList.push(first);\n }\n }\n\n return formattedList;\n}\n","import React, { Suspense, useEffect, useState, useRef } from 'react';\nimport templateData from '../../utility/getTemplateData';\nimport PPCC from '../../components/ppcc/ppcc';\nimport {\n Tile,\n Col,\n Button,\n Sheet,\n LoadingSpinner,\n BodyText,\n HeadingText,\n} from '@paypalcorp/pp-react';\nimport classNames from 'classnames';\n\nimport {\n GoalProgressMeter,\n useHasScrolledToPosition,\n CampaignImage,\n Title,\n AdvancedEndDateBadge,\n} from '@paypalcorp/donate-react';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport Landing from './landing';\nimport withTheme from '../../components/withTheme';\nimport {\n roundUpAndFormatCurrency,\n parseDateOnly,\n} from '../../utility/formator';\nimport { lazy as reactLazy } from 'react';\nimport { addClass } from '../../utility/domUtils';\nimport getContent from 'pp-react-l10n';\nimport WhosDonatedBanner from '../../components/WhosDonatedBanner';\nimport Flyout from '../../components/Flyout';\nimport { fetcher } from '../../utility/domUtils';\nimport { formatFeatured } from '../../utility/donorWall';\nimport ConfirmationSocialShare from '../../confirmation/ConfirmationSocialShare';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { MAX_MOBILE_WIDTH } from '../../setup/clientConstants';\nimport throttle from 'lodash/throttle';\nimport { trackDonateLandingButtonClick } from '../../fpti/fpti';\n\nconst LandingDonorWall = reactLazy(() =>\n import(\n /* webpackChunkName: \"LandingDonorWall\" */ '../../components/LandingDonorWall'\n )\n);\n\nconst LandingRichTextDisplay = reactLazy(() =>\n import(\n /* webpackChunkName: \"LandingRichTextDisplay\" */ '../../components/LandingRichTextDisplay'\n )\n);\n\nconst getCampaignContent = getContent('locals')('landing')('campaigns');\nconst getSocialContent = getContent('locals')('landing')('social');\nlet campaignsText = getContent('locals')('common/campaigns');\n\nconst messages = localsMessages('landing') || {};\n\nconst MAX_HEIGHT_BANNER = 380;\nconst MAX_HEIGHT_DESCRIPTION = 800;\n\nfunction isCampaignEnded(endDate) {\n return (\n endDate && new Date().setHours(0, 0, 0, 0) > endDate?.setHours(0, 0, 0, 0)\n );\n}\n\nconst CampaignLanding = () => {\n const [isPaymentCardOpen, setIsPaymentCardOpen] = useState(false);\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n const targetAmount = templateData.campaignTargetAmount;\n const campaignEndTime = templateData.campaignEndTime;\n const campaignTotalNumberOfTxn = templateData.campaignTotalNumberOfTxn;\n const amountRaisedWithCurrencySymbol = roundUpAndFormatCurrency(\n amountRaised,\n templateData.donationCode\n );\n const donationName = templateData.donationName ?? '';\n const [contributionsList, setContributionsList] = useState({\n featured: [],\n list: [],\n });\n const [contributionsError, setContributionsError] = useState(false);\n const [currentPage, setCurrentPage] = useState(1);\n const [isLoading, setIsLoading] = useState(true);\n const [retry, setRetry] = useState(0);\n const [enableReadMore, setEnableReadMore] = useState(true);\n const [descriptionHeight, setDescriptionHeight] = useState(\n MAX_HEIGHT_DESCRIPTION\n );\n const [originalDescriptionHeight, setOriginalDescriptionHeight] = useState(0);\n\n const stickToTop = useHasScrolledToPosition(650);\n\n const [isMobile, setIsMobile] = useState(false);\n\n const checkDeviceType = () => {\n setIsMobile(window.innerWidth < MAX_MOBILE_WIDTH, 200);\n };\n\n useEffect(() => {\n checkDeviceType();\n window.addEventListener('resize', throttle(checkDeviceType, 200));\n return () => {\n window.removeEventListener('resize', throttle(checkDeviceType, 200));\n };\n }, []);\n\n useEffect(() => {\n const fetchData = async () => {\n const result = await fetcher(\n `/donate/api/donorwall/${templateData.productId}/${currentPage}/10`\n ).then((response) => response.json());\n if (result.contributions) {\n setContributionsList({\n featured:\n contributionsList.featured.length !== 0\n ? contributionsList.featured\n : formatFeatured(\n result?.contributions?.contributions?.featured,\n campaignTotalNumberOfTxn\n ),\n list: [\n ...contributionsList.list,\n ...(result?.contributions?.contributions?.list ?? []),\n ],\n });\n } else {\n setContributionsError(true);\n }\n setIsLoading(false);\n };\n\n setIsLoading(true);\n setContributionsError(false);\n fetchData();\n }, [currentPage, retry]);\n\n const handleShowMore = () => {\n setCurrentPage(currentPage + 1);\n };\n\n useEffect(() => {\n addClass('#mainWrapper header.donate_global_nav', ['hide-header']);\n addClass('#donateWrapper', ['is-landing']);\n hideSpinnerOverlay();\n }, []);\n\n const goalAmtWithCurrencySymbol = roundUpAndFormatCurrency(\n targetAmount,\n templateData.donationCode\n );\n\n let campaignGoalTitle = campaignsText('campaignGoal.title', {\n goalAmount: goalAmtWithCurrencySymbol,\n });\n\n const renderEndDateBadge = () => (\n
\n \n
\n );\n\n const renderTitle = (size) => (\n
\n \n </div>\n );\n\n const renderGoalProgressMeter = () => (\n <div className=\"wrapper-progress-meter\">\n <GoalProgressMeter\n max={targetAmount}\n value={Math.round(amountRaised)}\n steps={amountRaisedWithCurrencySymbol}\n title={campaignGoalTitle}\n className=\"goal-progress-meter\"\n />\n </div>\n );\n\n const renderAvatarStack = () => (\n <div className=\"wrapper-avatar-stack\">\n <WhosDonatedBanner\n numberOfContributors={campaignTotalNumberOfTxn}\n contributionsList={contributionsList.list}\n isLoading={isLoading}\n />\n </div>\n );\n\n const renderDonationName = () => (\n <div className=\"wrapper-donation-name\">\n <BodyText>\n {donationName}\n <PPCC />\n </BodyText>\n </div>\n );\n\n const headerClasses = classNames({\n 'preview-header': true,\n sticky: stickToTop,\n });\n\n const renderHeader = () => (\n <div className=\"wrapper-header\">\n {renderEndDateBadge()}\n {renderTitle('lg')}\n {renderAvatarStack()}\n {renderDonationName()}\n {renderGoalProgressMeter()}\n </div>\n );\n\n const renderDonorWall = () => {\n return (\n <>\n <LandingDonorWall\n contributionsList={contributionsList}\n isLoading={isLoading}\n currentPage={currentPage}\n handleShowMore={handleShowMore}\n totalNumberOfTransactions={campaignTotalNumberOfTxn}\n />\n {campaignStatus === 'ACTIVE' &&\n !isCampaignEnded(new Date(campaignEndTime)) &&\n contributionsList?.list?.length >= 10 ? (\n <Flyout contributionsList={contributionsList.list} />\n ) : null}\n </>\n );\n };\n\n const renderContributionsError = () => {\n return (\n <div style={{ textAlign: 'center' }}>\n <BodyText>{getCampaignContent('contributions.error.title')}</BodyText>\n <BodyText style={{ color: '#515354' }}>\n {getCampaignContent('contributions.error.body')}\n </BodyText>\n <Button\n tertiary\n onClick={() => {\n setRetry(retry + 1);\n }}\n >\n {getCampaignContent('contributions.error.cta')}\n </Button>\n </div>\n );\n };\n\n const renderContributions = () => {\n if (!contributionsError) {\n return renderDonorWall();\n } else if (currentPage === 1) {\n return renderContributionsError();\n } else {\n return (\n <>\n {renderDonorWall()}\n {renderContributionsError()}\n </>\n );\n }\n };\n\n const stickyHeader = stickToTop && (\n <div className={headerClasses}>\n <div className=\"wrapper-header\">\n {renderEndDateBadge()}\n {renderTitle('sm')}\n {renderGoalProgressMeter()}\n </div>\n </div>\n );\n\n const personalizedMessages = {\n social_title: getSocialContent('subheader'),\n };\n\n const socialContent = () => {\n return (\n <div className=\"social-share-wrapper\">\n <HeadingText\n size=\"sm\"\n style={{ textAlign: `${!isMobile ? 'left' : 'center'}` }}\n >\n {messages.social.shareGeneric}\n </HeadingText>\n <ConfirmationSocialShare\n campaignId={templateData.productId}\n messages={messages}\n personalizedMessages={personalizedMessages}\n email={templateData.donationEmail}\n orgName={templateData.charityName}\n isLanding={true}\n />\n </div>\n );\n };\n\n const incrementDescription = (event) => {\n event.preventDefault();\n setDescriptionHeight((height) => {\n const incrementedHeight = height + MAX_HEIGHT_DESCRIPTION;\n if (incrementedHeight >= originalDescriptionHeight)\n setEnableReadMore(false);\n return incrementedHeight;\n });\n };\n\n const renderReadMore = () =>\n originalDescriptionHeight >= MAX_HEIGHT_DESCRIPTION &&\n enableReadMore && (\n <div className=\"campaign-read-more\">\n <Button tertiary onClick={incrementDescription}>\n {getCampaignContent('readMore')}\n </Button>\n </div>\n );\n return (\n <div className=\"campaign-landing-container\">\n <CampaignImage\n className=\"campaign-landing-banner\"\n src={templateData.bannerUrl}\n />\n {!isMobile && stickyHeader}\n <div className=\"content-container\">\n <Tile.Header />\n <div className=\"campaignDetails\" data-testid=\"campaignDetails\">\n <Tile.Content>\n <div className=\"campaign-title\">{renderHeader()}</div>\n <div\n className=\"campaign-description\"\n style={{\n maxHeight:\n originalDescriptionHeight >= MAX_HEIGHT_DESCRIPTION\n ? descriptionHeight + 'px'\n : 'unset',\n }}\n >\n <div\n ref={(descriptionContainer) =>\n descriptionContainer &&\n setOriginalDescriptionHeight(\n descriptionContainer.clientHeight\n )\n }\n >\n <Suspense\n fallback={\n <LoadingSpinner size=\"md\" style={{ margin: '0 auto' }} />\n }\n >\n <LandingRichTextDisplay\n campaignDescription={templateData.campaignDescription}\n />\n </Suspense>\n </div>\n {renderReadMore()}\n </div>\n <Suspense\n fallback={\n <LoadingSpinner size=\"md\" style={{ margin: '0 auto' }} />\n }\n >\n {renderContributions()}\n </Suspense>\n {campaignTotalNumberOfTxn > 0 && socialContent()}\n </Tile.Content>\n </div>\n {!isMobile ? (\n <div className=\"paymentCard\">\n <Landing />\n </div>\n ) : (\n <>\n <Col lg=\"12\" className=\"mobileDonate\">\n <Button\n onClick={() => {\n setIsPaymentCardOpen(!isPaymentCardOpen);\n trackDonateLandingButtonClick({ noteFieldDisplayed: null });\n }}\n >\n {getCampaignContent('donateButton')}\n </Button>\n </Col>\n <Sheet\n isOpen={isPaymentCardOpen}\n onClose={() => {}}\n title={getCampaignContent('donateButton')}\n mobileFixedHeight=\"90\"\n className=\"mobilePreview darkBackground\"\n wrapperClassName=\"mobilePreview-wrapper\"\n skipFormFocus\n >\n <Landing />\n </Sheet>\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default withTheme(CampaignLanding);\n","export const BTN_FACTORY_FORM = 'buttonFactory';\nexport const BTN_FACTORY_V3_FORM = 'buttonFactoryV3';\nexport const CAMPAIGNS_FORM = 'campaigns';\nexport const AUTH_STATE_ANONYMOUS = 'ANONYMOUS';\nexport const AUTH_STATE_LOGGEDIN = 'LOGGEDIN';\nexport const BTN_FACTORY_MAX_PROGRAMS = 10;\nexport const BTN_FACTORY_MAX_LENGTH_PROGRAMS = 127;\nexport const MAX_MOBILE_WIDTH = 1024;\nexport const MAX_CHARACTERS_RTE = 2500;\n\nexport const CAMPAIGN_STATUS = {\n ACTIVE: 'ACTIVE',\n INACTIVE: 'INACTIVE',\n};\n\nexport const COUNTRIES_AND_PERMIT_CURRENCY = {\n BR: 'BRL',\n};\n\nexport const ERRORS = {\n COUNTRY_NOT_SUPPORTED: 'COUNTRY_NOT_SUPPORTED',\n COMPLIANCE: 'COMPLIANCE',\n GENERIC: 'GENERIC',\n OFAC_HIT: 'OFAC_CAMPAIGN_SCAN_HIT',\n RESTRICTED_ACCOUNT: 'RESTRICTED_ACCOUNT',\n RESTRICTED_IMAGE: 'RESTRICTED_IMAGE',\n};\n","import React from 'react';\nimport CardSecurityCode from '../react-card-security-code';\nimport AppStore from '../stores/AppStore';\nimport * as AppActions from '../actions/AppActions';\nimport {\n localsMessages,\n guestLocalsMessages,\n} from '../utility/getTemplateData';\n\nconst guestMessages = guestLocalsMessages('guest/guestForm');\nconst errorMessages = localsMessages('errors/service');\n\nclass CVVComponent extends React.Component {\n constructor() {\n super();\n this.state = {\n securityCode: '',\n cardSpec: AppStore.getCardSpec().cardSpec,\n errorMessageCSC: '',\n };\n }\n\n componentDidMount() {\n this.props.onRef(this);\n }\n\n componentWillUnmount() {\n this.props.onRef(undefined);\n }\n\n handleChangeSecurityCode(securityCode) {\n this.setState({ securityCode: securityCode });\n this.props.handleSecurityCodeChange(securityCode);\n }\n\n handleFieldFocus(fieldName) {\n this.setState({ [fieldName]: '' });\n }\n\n /*\n * Handle error message for selected field\n */\n handleFieldBlur(value, fieldName, fieldRequired, fieldInvalid) {\n let newErrorState = {};\n\n if (value) {\n newErrorState = {\n [fieldName]: this.validateInputValue(value, fieldName, fieldInvalid),\n };\n } else {\n newErrorState = { [fieldName]: errorMessages[fieldRequired] };\n }\n\n this.setState(newErrorState);\n }\n\n /*\n * Validate input\n */\n validateInputValue(value, fieldName, fieldInvalid) {\n let {\n cardSpec: {\n fields: { csc = {} },\n },\n } = this.state;\n\n if (fieldName === 'errorMessageCSC') {\n let cscLen = value && value.length;\n let cscMax = csc.maxlength;\n let cscMin = csc.minlength || cscMax;\n\n if (!(cscLen >= cscMin && cscLen <= cscMax)) {\n return errorMessages[fieldInvalid];\n }\n }\n\n return '';\n }\n\n render() {\n let { cscplaceholder, csc: cscLabel, cscnote } = guestMessages.guestLabels;\n cscnote = cscnote && cscnote.replace('{csc}', cscLabel.toLowerCase());\n\n return (\n <div className=\"cvv_component\" id=\"cvv_component\">\n <div className=\"cvv_field\">\n <CardSecurityCode\n showIsRequiredError={true}\n label={cscLabel}\n placeholder={cscplaceholder}\n errorMessage={this.state.errorMessageCSC}\n handleChangeSecurityCode={(value) =>\n this.handleChangeSecurityCode(value)\n }\n handleFocus={(value) => this.handleFieldFocus('errorMessageCSC')}\n handleBlur={(value) =>\n this.handleFieldBlur(\n value,\n 'errorMessageCSC',\n 'REQUIRED_SECURITY_CODE',\n 'INVALID_SECURITY_CODE'\n )\n }\n cardSpec={this.state.cardSpec}\n helperText={cscnote}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default CVVComponent;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport getContent from 'pp-react-l10n';\nimport { CDN_HOST_NAME } from '../../../utility/constants';\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react-text';\nimport { V2CreditcardIcon } from '@paypalcorp/pp-react-icons';\nimport _isEmpty from 'lodash/isEmpty';\nimport { Badge } from '@paypalcorp/pp-react-badge';\n\nconst PaymentInformation = ({\n source,\n paymentDigits,\n paymentType,\n issuer,\n isPaypalCurrencyConversion,\n funds,\n cardType,\n}) => {\n const crossBorderContent = getContent('locals')('guest/crossBorder');\n const paymentInformation = crossBorderContent(\n 'label.paymentInformation',\n { type: paymentType, number: paymentDigits },\n { useHTML: true }\n );\n const preferred = crossBorderContent('label.preferred');\n const [paymentLogo, setPaymentLogo] = useState('');\n\n const transformText = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n };\n\n const getIssuer = () => {\n return issuer?.toLowerCase().split(' ').map(transformText).join(' ');\n };\n\n useEffect(() => {\n let cardImg = source?.payment_card?.issuer?.thumbnail_logo_url ?? null;\n if (\n cardImg === null ||\n _isEmpty(cardImg) ||\n typeof cardImg === 'undefined'\n ) {\n cardImg = `${CDN_HOST_NAME}/digitalassets/c/consumer/p2p/funding-sources/${cardType}.png`;\n }\n setPaymentLogo(cardImg);\n }, []);\n\n return (\n <div className=\"cb-payment-information ppvx_justify-content-between\">\n <div className=\"payment-info\">\n {!_isEmpty(paymentLogo) ? (\n <img src={paymentLogo} className=\"payment-logo\" aria-hidden=\"true\" />\n ) : (\n <V2CreditcardIcon size=\"xl2\" />\n )}\n <div className=\"pay-info\">\n {issuer && <BodyText>{getIssuer()}</BodyText>}\n <CaptionText className=\"funding-info\">\n {paymentInformation}\n </CaptionText>\n {!isPaypalCurrencyConversion && (\n <Badge type=\"success\">{preferred}</Badge>\n )}\n </div>\n </div>\n <BodyText>{funds}</BodyText>\n </div>\n );\n};\n\nPaymentInformation.propTypes = {\n fundingOptions: PropTypes.object,\n paymentDigits: PropTypes.string,\n paymentType: PropTypes.string,\n issuer: PropTypes.string,\n funds: PropTypes.string,\n isPaypalCurrencyConversion: PropTypes.bool,\n source: PropTypes.object,\n cardType: PropTypes.string,\n};\n\nexport default PaymentInformation;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { CURRENCY_CONVERSION_OPTIONS } from '../../pages/guest/GuestReview';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { Tile } from '@paypalcorp/pp-react-tile';\nimport { Sheet } from '@paypalcorp/pp-react-sheet';\nimport { BodyText, CaptionText, HeadingText } from '@paypalcorp/pp-react-text';\nimport { Spot } from '@paypalcorp/pp-react-spot';\nimport { V2CheckmarkBackgroundIcon } from '@paypalcorp/pp-react-icons';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { checkKeyPressed } from '../../utility/accessibilityUtils';\nconst messages = localsMessages('guest/crossBorder');\n\nconst CurrencyConversionOption = (props) => {\n return (\n <Tile\n className={`${props.className} ${\n props.isSelected ? 'show-highlight' : 'border-default'\n }`}\n role=\"checkbox\"\n aria-checked={props.isSelected}\n tabIndex=\"0\"\n onClick={props.handleOptionSelection}\n onKeyDown={(e) =>\n checkKeyPressed(e, () => {\n props.handleOptionSelection();\n })\n }\n >\n <Tile.Content>\n <div className=\"conversion-tile\">\n <Spot aria-hidden=\"true\" name={props.spotImage} size=\"lg\" />\n <div className=\"content\">\n <BodyText className=\"title\" strong>\n {props.title}\n </BodyText>\n {props.rate && <CaptionText strong>{props.rate}</CaptionText>}\n <CaptionText as=\"span\">{props.description}</CaptionText>\n </div>\n <V2CheckmarkBackgroundIcon\n className={`icon-check ${!props.isSelected && 'hide-icon'}`}\n size=\"sm\"\n />\n </div>\n </Tile.Content>\n </Tile>\n );\n};\n\nCurrencyConversionOption.propTypes = {\n isSelected: PropTypes.bool,\n title: PropTypes.string,\n rate: PropTypes.string,\n description: PropTypes.string,\n className: PropTypes.string,\n handleOptionSelection: PropTypes.func,\n spotImage: PropTypes.string,\n};\n\nconst CurrencyConversionModal = (props) => {\n const { label } = messages;\n const { selectedOption, exchangeRate } = props;\n const [isPayPalSelected, setPaypalSelected] = useState(\n selectedOption === CURRENCY_CONVERSION_OPTIONS.PAYPAL\n );\n\n const handleClose = () => {\n props.hideModal();\n };\n\n const handleNextButton = () => {\n props.handleOptionSelection(\n isPayPalSelected\n ? CURRENCY_CONVERSION_OPTIONS.PAYPAL\n : CURRENCY_CONVERSION_OPTIONS.ISSUER\n );\n };\n\n return (\n <Sheet\n className=\"currency-conversion-modal\"\n title=\"\"\n hideTitle={true}\n isOpen={props.isOpen}\n onClose={handleClose}\n >\n <HeadingText size=\"lg\" className=\"text-center title\">\n {label.modalTitle}\n </HeadingText>\n <BodyText className=\"text-center subTitle\">\n {label.modalSubTitle}\n </BodyText>\n\n <CurrencyConversionOption\n isSelected={isPayPalSelected}\n title={label.withPaypal.title}\n rate={label.withPayPal.rate.replace(/{amount}/i, exchangeRate)}\n description={label.withPayPal.message}\n handleOptionSelection={() => setPaypalSelected(true)}\n className=\"option-paypal\"\n spotImage=\"paypal-app\"\n />\n <CurrencyConversionOption\n isSelected={!isPayPalSelected}\n title={label.withCard.title}\n description={label.withCard.message}\n handleOptionSelection={() => setPaypalSelected(false)}\n className=\"option-card\"\n spotImage=\"credit-cards\"\n />\n <div className=\"text-center\">\n <Button className=\"btn-sheet-wide\" onClick={handleNextButton}>\n {label.modalButton}\n </Button>\n </div>\n </Sheet>\n );\n};\n\nCurrencyConversionModal.propTypes = {\n handleOptionSelection: PropTypes.func.isRequired,\n hideModal: PropTypes.func,\n selectedOption: PropTypes.string,\n exchangeRate: PropTypes.string,\n isOpen: PropTypes.bool,\n};\n\nexport default CurrencyConversionModal;\n","import { KEY_DOWN } from './constants';\n\nexport function checkKeyPressed(event, doFunction) {\n if (event.which === KEY_DOWN.SPACE || event.which === KEY_DOWN.ENTER) {\n return doFunction();\n }\n}\n","import React, { useState } from 'react';\nimport AppStore from '../../../stores/AppStore';\nimport PropTypes from 'prop-types';\nimport getContent from 'pp-react-l10n';\nimport { BodyText, CaptionText, Button } from '@paypalcorp/pp-react';\nimport {\n showSpinnerOverlay,\n hideSpinnerOverlay,\n} from '../../../utility/helper';\nimport { exchangeRateDecimalPoints } from '../../../utility/formator';\nimport { trackLinkClick } from '../../../fpti/fpti';\nimport { LINK_NAME, PAGE_SPEC } from '../../../fpti/fptiConstants';\nimport CurrencyConversionModal from '../../../components/currencyConversion/CurrencyConversionModal';\nimport _get from 'lodash/get';\nimport _includes from 'lodash/includes';\n\nconst crossborderContent = getContent('locals')('guest/crossBorder');\n\nconst CrossBorder = ({\n isPaypalCurrencyConversion,\n funds,\n getFundingOptions,\n currencyConversionOption,\n getLocalizedCurrency,\n stateCurrency,\n hasFees,\n}) => {\n const fundingOptions = AppStore.getFundingOptions();\n const DYNAMIC_CURRENCY_CONVERSION_TAG = 'DYNAMIC_CURRENCY_CONVERSION';\n\n const rate = `${getLocalizedCurrency(\n '1.00',\n stateCurrency.inCurrency\n )}= ${exchangeRateDecimalPoints(\n stateCurrency.exchangeRate,\n stateCurrency.amountDecimalPoint,\n stateCurrency.inSymbol\n )} ${stateCurrency.outCurrency}`;\n\n const [currencyConversionOpen, setCurrencyConversionOpen] = useState(false);\n\n const handleOptionSelection = (option) => {\n // const beforeOption = currencyConversionOption;\n // setSelectedOption(option)\n if (currencyConversionOption !== option) {\n setCurrencyConversionOpen(false);\n showSpinnerOverlay();\n getFundingOptions(option).finally(() => {\n hideSpinnerOverlay();\n });\n } else {\n setTimeout(() => {\n setCurrencyConversionOpen(false);\n }, 300);\n }\n };\n\n /**\n * Returns true if currency conversion options should be displayed\n * @param {Array} fundingSources Funding Sources\n * @return {Boolean} True if currency conversion options should be displayed\n */\n const shouldShowCurrencyConversionOptions = () => {\n const fundingSources = fundingOptions.sources || [];\n const lastFundingSource = fundingSources[fundingSources.length - 1];\n const tags = _get(lastFundingSource, 'tags');\n return _includes(tags, DYNAMIC_CURRENCY_CONVERSION_TAG);\n };\n\n return (\n <>\n {!hasFees && (\n <div className=\"ppvx_d-flex ppvx_justify-content-between ppvx_align-items-center total-donation\">\n <BodyText strong>{crossborderContent('label.youllDonate')}</BodyText>\n <BodyText strong>{funds}</BodyText>\n </div>\n )}\n\n <div className=\"ppvx_d-flex ppvx_justify-content-between ppvx_align-items-center change-conversion\">\n <BodyText>\n {isPaypalCurrencyConversion\n ? crossborderContent('label.withPaypal.title')\n : crossborderContent('label.withCard.title')}\n </BodyText>\n <Button\n tertiary\n onClick={() => {\n trackLinkClick(LINK_NAME.CURRENCY_CONVERSION, {\n pageSpec: PAGE_SPEC.CROSS_BORDER_PAGE,\n });\n setCurrencyConversionOpen(true);\n }}\n >\n {crossborderContent('label.changeCurrencyButton')}\n </Button>\n </div>\n {isPaypalCurrencyConversion && (\n <CaptionText>\n {crossborderContent(\n 'label.conversion',\n { amount: rate },\n { useHTML: true }\n )}\n </CaptionText>\n )}\n\n {shouldShowCurrencyConversionOptions() && (\n <div className=\"conversion-message\">\n {isPaypalCurrencyConversion ? (\n <CaptionText>\n {AppStore.getUserCountry() === 'US'\n ? crossborderContent('label.spread')\n : crossborderContent('label.fee')}\n </CaptionText>\n ) : null}\n </div>\n )}\n\n <CurrencyConversionModal\n isOpen={currencyConversionOpen}\n exchangeRate={rate}\n handleOptionSelection={handleOptionSelection}\n hideModal={() => setCurrencyConversionOpen(false)}\n selectedOption={currencyConversionOption}\n />\n </>\n );\n};\n\nCrossBorder.propTypes = {\n isPaypalCurrencyConversion: PropTypes.bool,\n funds: PropTypes.string,\n handleCurrencyConversionClick: PropTypes.func,\n exchangeRate: PropTypes.string,\n hasFees: PropTypes.bool,\n};\n\nexport default CrossBorder;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport getContent from 'pp-react-l10n';\nimport _includes from 'lodash/includes';\nimport {\n BodyText,\n IconButton,\n V2QuestionSmIcon,\n Sheet,\n Button,\n} from '@paypalcorp/pp-react';\n\nconst pricingContent = getContent('locals')('guest/reviewFees');\n\nconst FeePricing = ({ feeAmounts, getLocalizedCurrency }) => {\n const [openHelperSheet, setOpenHelperSheet] = useState(false);\n\n let paymentAmount = getLocalizedCurrency(\n feeAmounts?.payment_amount?.value || '0.00',\n feeAmounts?.payment_amount?.currency || 'USD'\n );\n\n let totalFee = getLocalizedCurrency(\n feeAmounts?.total_fee?.value || '0.00',\n feeAmounts?.total_fee?.currency || 'USD'\n );\n\n let totalAmountPaid = getLocalizedCurrency(\n feeAmounts?.total_amount_paid?.value || '0.00',\n feeAmounts?.total_amount_paid?.currency || 'USD'\n );\n\n return (\n <>\n <div className=\"ppvx_d-flex ppvx_justify-content-between ppvx_align-items-center fee-donation\">\n <BodyText>{pricingContent('donation')}</BodyText>\n <BodyText>\n {_includes(paymentAmount, feeAmounts?.payment_amount?.currency)\n ? `${paymentAmount}`\n : `${paymentAmount} ${feeAmounts?.payment_amount?.currency}`}\n </BodyText>\n </div>\n <div className=\"ppvx_d-flex ppvx_justify-content-between ppvx_align-items-center fee-donation\">\n <BodyText className=\"pricing-fee\">\n {pricingContent('fee')}\n <IconButton\n className=\"tooltip-icon-button\"\n buttonType=\"tertiary\"\n svgIconComponent={V2QuestionSmIcon}\n size=\"sm\"\n onClick={() => setOpenHelperSheet(true)}\n >\n {pricingContent('helperTitle')}\n </IconButton>\n </BodyText>\n <BodyText>\n {_includes(totalFee, feeAmounts?.total_fee?.currency)\n ? `${totalFee}`\n : `${totalFee} ${feeAmounts?.total_fee?.currency}`}\n </BodyText>\n </div>\n <div className=\"ppvx_d-flex ppvx_justify-content-between ppvx_align-items-center fee-donation\">\n <BodyText strong>{pricingContent('total')}</BodyText>\n <BodyText strong>\n {_includes(totalAmountPaid, feeAmounts?.total_amount_paid?.currency)\n ? `${totalAmountPaid}`\n : `${totalAmountPaid} ${feeAmounts?.total_amount_paid?.currency}`}\n </BodyText>\n </div>\n\n <Sheet\n className=\"pricing-helper-sheet\"\n id=\"pricing-helper-sheet\"\n title={pricingContent('helperTitle')}\n hideTitle={false}\n isOpen={openHelperSheet}\n onClose={() => setOpenHelperSheet(false)}\n >\n <BodyText className=\"helper-text-description\">\n {pricingContent('helperDescription')}\n </BodyText>\n <div className=\"button-link\">\n <Button\n as=\"a\"\n target=\"_blank\"\n href=\"/webapps/mpp/paypal-fees\"\n role=\"button\"\n secondary\n >\n {pricingContent('helperButton')}\n </Button>\n </div>\n </Sheet>\n </>\n );\n};\n\nFeePricing.propTypes = {\n feeAmounts: PropTypes.object,\n getLocalizedCurrency: PropTypes.func,\n};\n\nexport default FeePricing;\n","import React from 'react';\nimport AppStore from '../../stores/AppStore';\nimport * as AppActions from '../../actions/AppActions';\nimport TemplateData, {\n localsMessages,\n guestLocalsMessages,\n} from '../../utility/getTemplateData';\nimport PropTypes from 'prop-types';\nimport { showSpinnerOverlay, hideSpinnerOverlay } from '../../utility/helper';\nimport CancelAndReturn from '../../components/cancelAndReturn';\nimport _get from 'lodash/get';\nimport _includes from 'lodash/includes';\nimport _isEmpty from 'lodash/isEmpty';\nimport _find from 'lodash/find';\nimport DonateGiftAid from '../../guest-payment-components/DonateGiftAid';\nimport {\n normalizeNumber,\n formatCurrencyAsString,\n} from '../../utility/formator';\nimport { withRouter } from 'react-router-dom';\nimport { observeUntilEventObserved } from '../../utility/helper';\nimport { fetcher } from '../../utility/domUtils';\nimport CVVComponent from '../../containers/cvv-component';\nimport withDonate from '../../components/guest/WithDonate';\nimport withTheme from '../../components/withTheme';\nimport ThreeDSContainer from '../../components/threeDS/ThreeDSContainer';\nimport { Alert, Button, BodyText, CaptionText } from '@paypalcorp/pp-react';\nimport getContent from 'pp-react-l10n';\nimport CloseButton from '../../components/CloseButton';\nimport BackButton from '../../components/BackButton';\nimport DonateHeader from '../../components/common/DonateHeader';\nimport PaymentInformation from './guestReviewComponents/PaymentInformation';\nimport CrossBorder from './guestReviewComponents/CrossBorder';\nimport FeePricing from './guestReviewComponents/FeePricing';\nimport {\n isExternalFlow,\n isPPUnlistedCampaign,\n} from '../../utility/productIntegrationUtils';\nimport { isInContext } from '../../utility/inContextDonation';\nimport {\n track3DSProceedToPayment,\n trackErrorIM,\n trackGuestReviewPageDonateClick,\n trackLinkClick,\n} from '../../fpti/fpti';\nimport { LINK_NAME, PAGE_SPEC } from '../../fpti/fptiConstants';\n\nlet giftAidText = localsMessages('common/giftAidIt');\nconst donateGiftPercentage = AppStore.getGiftAidItExtraAmount();\nlet giftAidTextObj = (giftAidText && giftAidText.giftAidIt) || {};\nconst guestMessages = guestLocalsMessages('guest/guestForm');\nconst messages = localsMessages('guest/crossBorder');\n\nexport const CURRENCY_CONVERSION_OPTIONS = {\n PAYPAL: 'PAYPAL',\n ISSUER: 'ISSUER',\n};\n\nclass GuestReview extends React.Component {\n constructor(props) {\n super(props);\n\n let isRecurring = AppStore.getDonationRecurring() === 'checked';\n const stateConversionWithPayPal = this.getStateForConversionWithPayPal();\n\n this.state = {\n subHeaderLabel: TemplateData.donationName,\n donationId: AppStore.getSelectedProgram() || TemplateData.donationId,\n orgName: TemplateData.charityName,\n amountDecimalPoint: TemplateData.donationDecimalPoint || '.',\n decimalPoint: TemplateData.donationDecimalPoint || '.',\n isRecurring,\n ...stateConversionWithPayPal,\n showCVVField: false,\n securityCode: '',\n isCurrencyConversionModalOpen: false,\n selectedRecurringFrequency: AppStore.getSelectedRecurringFrequency(),\n };\n this.getFundingOptions = this.getFundingOptions.bind(this);\n }\n\n endCustomCPLTracking = () => {\n const spinnerOverlay = document.getElementById('spinnerOverlay');\n\n if (spinnerOverlay.style.display === 'none') {\n // From tesla flow we don't have the spinner\n window.PAYPAL.analytics.endCPLTracking({\n page: 'main:donate:wps:guest:crossBorder:web::',\n action: 'crossborder_page_loaded',\n uicomp: 'crossBorder',\n uitype: 'page',\n });\n } else {\n // From guest form we need to wait for the spinner to disappear\n observeUntilEventObserved(\n spinnerOverlay,\n { attributes: true },\n (observer) => {\n if (spinnerOverlay.style.display === 'none') {\n window.PAYPAL.analytics.endCPLTracking({\n page: 'main:donate:wps:guest:crossBorder:web::',\n action: 'crossborder_page_loaded',\n uicomp: 'crossBorder',\n uitype: 'page',\n });\n\n observer.disconnect();\n return;\n }\n }\n );\n }\n };\n\n componentDidMount() {\n this.endCustomCPLTracking();\n }\n\n getStateForConversionWithPayPal() {\n let fundingOptions = AppStore.getFundingOptions();\n let myData = AppStore.getAllData() || {};\n const cardType = _get(myData, 'cardSpec.cardSpec.type', '')\n .replace(/[.,_]|\\s\\(.*\\)/g, '')\n .replace(/[\\s_]/g, '-')\n .toLowerCase();\n let [fundingSources] = fundingOptions ? fundingOptions.sources : [];\n let paymentNetwork = fundingSources.payment_card.network.toLowerCase();\n paymentNetwork =\n paymentNetwork.charAt(0).toUpperCase() + paymentNetwork.slice(1);\n let paymentDigits = fundingSources.payment_card.last_4;\n let paymentType = (fundingSources?.payment_card?.type ?? '').toLowerCase();\n paymentType =\n paymentType && paymentType.charAt(0).toUpperCase() + paymentType.slice(1);\n let issuer = fundingSources.payment_card.issuer.name;\n let exchangeRate = parseFloat(\n fundingOptions.currency_conversion?.exchange_rate || '0.00'\n ).toString();\n let fundsIn = fundingOptions.currency_conversion?.funds_in || '0.00';\n let fundsOut = fundingOptions.currency_conversion?.funds_out || '0.00';\n let feeAmounts = fundingOptions.fee_amount || null;\n let amount = this.getLocalizedCurrency(\n fundingSources.payment_card.amount.value,\n fundingSources.payment_card.amount.currency\n );\n\n return {\n exchangeRate,\n paymentCard: `${paymentNetwork} x-${paymentDigits}`,\n paymentDigits,\n paymentType,\n source: fundingSources,\n issuerName: issuer,\n inAmount: fundsIn.value,\n inCurrency: fundsIn.currency,\n inSymbol: fundsIn.symbol,\n outAmount: fundsOut.value,\n outCurrency: fundsOut.currency,\n outSymbol: fundsOut.symbol,\n currencyConversionOption: CURRENCY_CONVERSION_OPTIONS.PAYPAL,\n cardType,\n feeAmounts,\n currencyConversion: fundingOptions.currency_conversion,\n fundingCode: !_isEmpty(fundingOptions.currency_conversion)\n ? 'CROSS_BORDER'\n : 'PAYER_FEE',\n currencyCode: fundingOptions.currencyCode,\n amount: _includes(amount, fundingSources.payment_card.amount.currency)\n ? `${amount}`\n : `${amount} ${fundingSources.payment_card.amount.currency}`,\n };\n }\n\n getStateForConversionWithIssuer() {\n let fundingOptions = AppStore.getFundingOptions();\n let [fundingSources] = fundingOptions ? fundingOptions.sources : [];\n let amount = this.getLocalizedCurrency(\n fundingSources.payment_card.amount.value,\n fundingSources.payment_card.amount.currency\n );\n let symbol = AppStore.getDonationSymbol();\n let currency = AppStore.getDonationCode();\n let feeAmounts = fundingOptions.fee_amount || null;\n\n // No currency_conversion. fundsIn and fundsOut will not be available.\n return {\n amount: _includes(amount, fundingSources.payment_card.amount.currency)\n ? `${amount}`\n : `${amount} ${fundingSources.payment_card.amount.currency}`,\n symbol,\n currency,\n currencyConversionOption: CURRENCY_CONVERSION_OPTIONS.ISSUER,\n currencyConversion: fundingOptions.currency_conversion,\n feeAmounts,\n };\n }\n\n updateFundingOptionsState() {\n let fundingOptions = AppStore.getFundingOptions();\n if (!fundingOptions.currency_conversion) {\n this.setState(this.getStateForConversionWithIssuer());\n } else {\n this.setState(this.getStateForConversionWithPayPal());\n }\n }\n\n getLocalizedCurrency = (amount, currency) => {\n let formatedAmount = {\n value: parseFloat(amount).toFixed(2),\n currency: currency,\n };\n let newAmount = formatCurrencyAsString(formatedAmount);\n return newAmount;\n };\n\n handleCurrencyConversionClick = () => {\n trackLinkClick(LINK_NAME.CURRENCY_CONVERSION, {\n pageSpec: PAGE_SPEC.CROSS_BORDER_PAGE,\n });\n this.showCurrencyConversionModal();\n };\n\n showCurrencyConversionModal = () => {\n this.setState({\n isCurrencyConversionModalOpen: true,\n });\n };\n\n hideCurrencyConversionModal = () => {\n this.setState({\n isCurrencyConversionModalOpen: false,\n });\n };\n\n handleDonateClick = () => {\n if (this.state.showCVVField) {\n const cvv = document.getElementById('securityCode').value;\n this.childCVVInfo.handleFieldBlur(\n cvv,\n 'errorMessageCSC',\n 'REQUIRED_SECURITY_CODE',\n 'INVALID_SECURITY_CODE'\n );\n\n let hasError =\n document.getElementsByClassName('vx_has-error-with-message').length > 0;\n if (!cvv || hasError) {\n return;\n }\n }\n const fundingOptions = AppStore.getFundingOptions();\n const contingencies = _get(fundingOptions, 'contingencies') || [];\n const threeDSContingency =\n _find(contingencies, { action: '3D_SECURE_DATA_COLLECTION_REQUIRED' }) ||\n {};\n\n if (!_isEmpty(threeDSContingency)) {\n this.threeDSContainer.initializeThreeDS();\n return;\n }\n\n // All contingencies resolved\n this.processDonation();\n };\n\n processDonation = () => {\n showSpinnerOverlay();\n\n trackGuestReviewPageDonateClick({\n isCvvSend: this.state.securityCode?.length > 0,\n });\n\n return this.props.doFulfilment({\n securityCode: this.state.securityCode,\n });\n };\n\n handleGiftAidOption = (giftAidState) => {\n AppActions.updateGiftaidItFlag({ giftAidItFlag: giftAidState });\n };\n\n updateGiftAidComponent = (state) => {\n const extraCostText = getContent('locals')('common/giftAidIt')(\n 'giftAidIt.extraCost',\n {\n currency: state.outSymbol,\n amount: state.outAmount,\n extraAmount: (donateGiftPercentage * state.outAmount).toFixed(2),\n },\n {\n useHTML: true,\n }\n );\n\n let modalp1 = (giftAidTextObj && giftAidTextObj.modalp1) || '',\n modalp2 = (giftAidTextObj && giftAidTextObj.modalp2) || '',\n applyGiftAid = (giftAidTextObj && giftAidTextObj.applyGiftAid) || '';\n\n modalp1 = modalp1 && modalp1.replace('{orgName}', state.subHeaderLabel);\n modalp2 = modalp2 && modalp2.replace('{orgName}', state.subHeaderLabel);\n applyGiftAid =\n applyGiftAid && applyGiftAid.replace('{orgName}', state.subHeaderLabel);\n\n giftAidTextObj.extraCost = extraCostText;\n giftAidTextObj.modalp1 = modalp1;\n giftAidTextObj.modalp2 = modalp2;\n giftAidTextObj.applyGiftAid = applyGiftAid;\n };\n\n getFundingOptions(currencyConversionType) {\n let fundingOptions = AppStore.getFundingOptions();\n const fundingSources = fundingOptions.sources || [];\n const lastFundingSource = fundingSources[fundingSources.length - 1];\n const paymentCardId = _get(lastFundingSource, 'payment_card.id');\n\n return fetcher('/donate/guest/fundingOptions', {\n method: 'POST',\n body: JSON.stringify({\n amount: normalizeNumber(AppStore.getDonationAmount()),\n code: AppStore.getDonationCode(),\n fundingOptionId: AppStore.getFundingOptions().id,\n preferences: {\n currency_conversion: [\n {\n payment_card_id: paymentCardId,\n type: currencyConversionType,\n validity: 'TRANSACTION',\n },\n ],\n },\n consentShareAddress: AppStore.getShareAddress(),\n token: TemplateData.token,\n onboardingEnabled: TemplateData.onboardingEnabled,\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n console.log('getFundingOptions result :: ', result);\n\n // The funding options data format returned by the server is\n // different for ISSUER and PAYPAL. Handle it appropriately.\n\n // For conversion with 'ISSUER'\n if (currencyConversionType === CURRENCY_CONVERSION_OPTIONS.ISSUER) {\n fundingOptions = _get(result, 'data.fundingOpt[0]');\n } else {\n // For conversion with 'PAYPAL'\n fundingOptions = _get(result, 'fundingOpts[0]');\n }\n\n // Handle error case where fundingOptions call succeeds\n // but no data is returned\n if (_isEmpty(fundingOptions)) {\n trackErrorIM({\n errorCode: currencyConversionType,\n errorMessage: 'FUNDING_OPTIONS_EMPTY_CROSSBORDER',\n });\n this.props.history.push(\n `/donate/error/payment?token=${TemplateData.token}`\n );\n return;\n }\n\n // If CVV contingencies are present and has not been resolved,\n // then display cvv component\n const contingencies = _get(fundingOptions, 'contingencies');\n const hasCvvContingency = _find(contingencies, {\n action: 'CVV_REQUIRED',\n });\n const isCvvContingencyResolved = _get(\n result,\n 'data.contingencyResolutionStatus.cvvContingencyResolved',\n false\n );\n\n this.setState({\n showCVVField: hasCvvContingency && !isCvvContingencyResolved,\n });\n\n // Updating store with funding options\n AppActions.updateFundingOptions({ fundingOptions });\n\n this.updateFundingOptionsState();\n\n console.log(result);\n })\n .catch(() => {\n console.log('FAILED');\n this.props.history.push(\n `/donate/error/payment?token=${TemplateData.token}`\n );\n })\n .finally(() => {\n hideSpinnerOverlay();\n });\n }\n\n handleSecurityCodeChange = (securityCode) => {\n this.setState({\n securityCode: securityCode,\n });\n };\n\n handleThreeDSStepUpAuthSuccess = () => {\n this.props.toggleSpinner(true);\n\n track3DSProceedToPayment({\n isCvvSend: this.state.securityCode?.length > 0,\n });\n\n this.props.doFulfilment({\n securityCode: this.state.securityCode,\n });\n };\n\n handleThreeDSStepUpAuthFailure = () => {\n // Unrecoverable error !!\n this.props.history.push('/donate/error/payment');\n };\n\n handleThreeDSFailure = () => {\n // Unrecoverable error !!\n this.props.history.push('/donate/error/threeDS');\n };\n\n render() {\n const inAmount = this.getLocalizedCurrency(\n this.state.inAmount,\n this.state.inCurrency\n );\n const outAmount = this.getLocalizedCurrency(\n this.state.outAmount,\n this.state.outCurrency\n );\n const fundsIn = _includes(inAmount, this.state.inCurrency)\n ? `${inAmount}`\n : `${inAmount} ${this.state.inCurrency}`;\n const fundsOut = _includes(outAmount, this.state.outCurrency)\n ? `${outAmount}`\n : `${outAmount} ${this.state.outCurrency}`;\n\n const getRecurringLabel = () => {\n const donateNowRec = _get(guestMessages, 'guestLabels.donateNowRec');\n switch (this.state.selectedRecurringFrequency) {\n case 'Week':\n return donateNowRec.weekly;\n case 'Month':\n return donateNowRec.monthly;\n case 'Year':\n return donateNowRec.yearly;\n default:\n return donateNowRec.monthly;\n }\n };\n\n const { label = {} } = messages || {};\n let donateNowRecurring = getRecurringLabel();\n donateNowRecurring =\n donateNowRecurring && donateNowRecurring.replace('{amount}', fundsOut);\n\n let giftaidFlag = AppStore.getGiftaidItFlagStatus();\n this.updateGiftAidComponent(this.state);\n\n let { csc: cscLabel, cscwarning } = guestMessages.guestLabels;\n cscwarning =\n cscwarning && cscwarning.replace('{csc}', cscLabel.toLowerCase());\n\n const { showCVVField } = this.state;\n\n return (\n <div\n className={`${\n TemplateData.bannerUrl ? 'gn_donate_wrapper' : 'donate_wrapper'\n } ${isInContext() ? 'context_gn_wrapper' : ''}`}\n >\n <DonateHeader />\n\n {showCVVField && (\n <div className=\"ppvx_row alert-container mb-8\">\n <Alert type=\"warning\">{cscwarning}</Alert>\n </div>\n )}\n {isExternalFlow() && (\n <>\n <BackButton inverse />\n <CloseButton inverse />\n </>\n )}\n\n <div id=\"crossBorderContainer\" className=\"cross-border\">\n {TemplateData.isGiftaiditEnabled && (\n <DonateGiftAid\n isAlreadyEnrolled={giftaidFlag}\n showAddress={false}\n addressData=\"\"\n isChecked={giftaidFlag}\n handleGiftAidOption={this.handleGiftAidOption}\n contentMsg={giftAidTextObj}\n />\n )}\n\n <div className=\"ppvx_row\">\n <div className=\"ppvx_col-12\">\n <BodyText style={{ margin: '28px 0' }}>\n {label.donatingFrom}\n </BodyText>\n </div>\n </div>\n\n <PaymentInformation\n fundingOptions={AppStore.getFundingOptions()}\n paymentDigits={this.state.paymentDigits}\n paymentType={this.state.paymentType}\n source={this.state.source}\n issuer={this.state.issuerName}\n isPaypalCurrencyConversion={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n }\n funds={this.state.amount}\n cardType={this.state.cardType}\n />\n\n {showCVVField && (\n <CVVComponent\n onRef={(ref) => (this.childCVVInfo = ref)}\n handleSecurityCodeChange={this.handleSecurityCodeChange}\n />\n )}\n\n {isPPUnlistedCampaign() && !_isEmpty(this.state.feeAmounts) && (\n <FeePricing\n feeAmounts={this.state.feeAmounts}\n getLocalizedCurrency={this.getLocalizedCurrency}\n />\n )}\n\n {this.state.fundingCode === 'CROSS_BORDER' && (\n <CrossBorder\n hasFees={!_isEmpty(this.state.feeAmounts)}\n isPaypalCurrencyConversion={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n }\n funds={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n ? fundsIn\n : this.state.amount\n }\n getFundingOptions={this.getFundingOptions}\n currencyConversionOption={this.state.currencyConversionOption}\n getLocalizedCurrency={this.getLocalizedCurrency}\n setSelectedOption={(currencyConversionType) =>\n this.setState({\n currencyConversionOption: currencyConversionType,\n })\n }\n stateCurrency={{\n inCurrency: this.state.inCurrency,\n exchangeRate: this.state.exchangeRate,\n amountDecimalPoint: this.state.amountDecimalPoint,\n inSymbol: this.state.inSymbol,\n outCurrency: this.state.outCurrency,\n }}\n />\n )}\n\n <div className=\"legal-text text-center\">\n <CaptionText>\n {getContent('locals')('guest/crossBorder')(\n 'label.policies',\n { country: TemplateData.country },\n { useHTML: true }\n )}\n </CaptionText>\n </div>\n\n <div className=\"text-center\">\n <Button\n className=\"btn-wide\"\n id=\"donate-button\"\n disabled={this.props.disabled}\n onClick={this.handleDonateClick}\n >\n {this.state.isRecurring ? donateNowRecurring : label.donatenow}\n </Button>\n </div>\n <div className=\"cross-border-cancel-return\">\n <CancelAndReturn />\n </div>\n\n <ThreeDSContainer\n onThreeDSStepUpAuthNotRequired={this.handleThreeDSStepUpAuthSuccess}\n onThreeDSStepUpAuthSuccess={this.handleThreeDSStepUpAuthSuccess}\n onThreeDSStepUpAuthFailure={this.handleThreeDSFailure}\n onThreeDSFailure={this.handleThreeDSFailure}\n onRef={(ref) => (this.threeDSContainer = ref)}\n />\n </div>\n </div>\n );\n }\n}\n\nGuestReview.propTypes = {\n doFulfilment: PropTypes.func,\n history: PropTypes.object,\n toggleSpinner: PropTypes.func,\n disabled: PropTypes.bool,\n};\n\nexport default withRouter(withDonate(withTheme(GuestReview)));\n","import withPageTrack from '../../confirmation/withPageTrack';\nimport withPostTransactionRequest from '../../confirmation/withPostTransactionRequest';\nimport PendingView from '../../confirmation/PendingView';\nimport SuccessView from '../../confirmation/SuccessView';\n\nconst FLOW = 'guest';\nconst POST_TRANSACTION_URL = '/donate/guest/postTransaction';\n\nexport const GuestConfirmationPending = withPageTrack(\n withPostTransactionRequest(PendingView, POST_TRANSACTION_URL),\n FLOW,\n 'pending'\n);\n\nexport const GuestConfirmationSuccess = withPageTrack(\n withPostTransactionRequest(SuccessView, POST_TRANSACTION_URL),\n FLOW,\n 'success'\n);\n","import React, { useEffect } from 'react';\nimport { HeadingText, BodyText, Link, Button } from '@paypalcorp/pp-react';\nimport Illustration from '../../components/illustrations/Illustration';\nimport CloseButton from '../../components/CloseButton';\nimport {\n isInContext,\n isMobileOrInContext,\n} from '../../utility/inContextDonation';\nimport withTheme from '../../components/withTheme';\nimport { isExternalFlow } from '../../utility/productIntegrationUtils';\nimport { addClass } from '../../utility/domUtils';\n\nfunction FullPageError({\n illustrationType = 'critical',\n title,\n body,\n body2,\n linkLabel,\n handleLinkClick,\n buttonLabel,\n handleButtonClick,\n showCloseButton = false,\n centerBody = false,\n}) {\n useEffect(() => {\n if (isInContext()) {\n addClass('#mainWrapper header.donate_global_nav', ['hide-header']);\n }\n }, []);\n return (\n <div\n className={`donate_wrapper ${\n isMobileOrInContext() ? 'mobile_view' : ''\n } ${isInContext() ? 'gn_donate_wrapper' : ''} fullPageError`}\n >\n {isExternalFlow() && showCloseButton && <CloseButton />}\n <Illustration size=\"short\" type={illustrationType} />\n <HeadingText size=\"sm\" className=\"title\">\n {title}\n </HeadingText>\n {body ? (\n <BodyText className={`body ${centerBody ? 'text-center' : ''}`}>\n {body}\n </BodyText>\n ) : null}\n {body2 ? (\n <BodyText className={`body ${centerBody ? 'text-center' : ''}`}>\n {body2}\n </BodyText>\n ) : null}\n\n {buttonLabel ? (\n <Button secondary onClick={handleButtonClick} className=\"cta\">\n {buttonLabel}\n </Button>\n ) : null}\n\n {linkLabel ? (\n <Link className=\"cta\" onClick={handleLinkClick}>\n {linkLabel}\n </Link>\n ) : null}\n </div>\n );\n}\n\nexport default withTheme(FullPageError);\n","import React from 'react';\nimport getContent from 'pp-react-l10n';\nimport AppStore from '../../stores/AppStore';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData, { localsMessages } from '../../utility/getTemplateData';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { trackErrorPageIM } from '../../fpti/fpti';\nimport { PAGE_SPEC } from '../../fpti/fptiConstants';\nimport { addClass, removeClass } from '../../utility/domUtils';\nimport FullPageError from './FullPageError';\n\nclass PaymentError extends React.Component {\n constructor() {\n super();\n this.state = {};\n }\n\n componentDidMount = () => {\n addClass('#mainWrapper', ['full-page-error']);\n hideSpinnerOverlay();\n const ERROR_CODE = AppStore.getPaymentError() || '';\n trackErrorPageIM({\n pageSpec: PAGE_SPEC.GUEST_FAILURE_PAGE,\n errorCode: ERROR_CODE,\n });\n };\n\n componentWillUnmount() {\n removeClass('#mainWrapper', ['full-page-error']);\n }\n\n handleTryAgain = () => {\n this.props.history.push(`/donate?token=${templateData.token}`);\n };\n\n render() {\n const { error = {}, label = {} } = localsMessages('errors/paymentError');\n const ERROR_CODE = AppStore.getPaymentError() || '';\n\n let { WSM_CANNOT_PAY_SELF = '', WENT_WRONG, TEMP_GLITCH } = error;\n let { tryagain } = label;\n\n const hideButton = ERROR_CODE === 'WSM_PAYER_LIMIT_EXCEEDED';\n\n switch (ERROR_CODE) {\n case 'WSM_PAYMENT_DENIED':\n WENT_WRONG = error.DID_NOT_WORK;\n TEMP_GLITCH = error.DIFF_CREDIT_DEBIT;\n tryagain = label.trydiffcard;\n break;\n case 'WSM_CANNOT_PAY_SELF':\n const L2 =\n WSM_CANNOT_PAY_SELF &&\n WSM_CANNOT_PAY_SELF.replace(\n '{data.dataMerchant.name}',\n templateData.donationName\n );\n WENT_WRONG = error.WSM_CANNOT_PAY_SELF_H;\n TEMP_GLITCH = L2;\n break;\n case 'WSM_PAYER_LIMIT_EXCEEDED':\n WENT_WRONG = error.AmountLimitBreachError;\n TEMP_GLITCH = getContent('locals')('errors/paymentError')(\n 'error.CustomerCareMessage',\n {\n customerServiceLink: '/selfhelp/home',\n },\n {\n useHTML: true,\n }\n );\n break;\n default:\n break;\n }\n\n return (\n <div>\n <FullPageError\n title={WENT_WRONG}\n body={TEMP_GLITCH}\n buttonLabel={hideButton ? null : tryagain}\n handleButtonClick={this.handleTryAgain}\n showCloseButton={true}\n />\n </div>\n );\n }\n}\n\nexport default withRouter(withTheme(PaymentError));\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport Illustration from '../../components/illustrations/Illustration';\nimport ConfirmationBody from '../../confirmation/ConfirmationBody';\nimport _get from 'lodash/get';\nimport { isMobileOrInContext } from '../../utility/inContextDonation';\nimport { trackErrorPageIM } from '../../fpti/fpti';\nimport { PAGE_SPEC } from '../../fpti/fptiConstants';\nimport { Row, Col } from '@paypalcorp/pp-react';\n\nconst messages = localsMessages('errors/paymentError');\nconst noAccountErrorMessage = _get(\n messages,\n 'noAccountError',\n \"We can't complete this donation. The receiver doesn't have a valid PayPal account.\"\n);\n\nclass UnilateralError extends React.Component {\n constructor() {\n super();\n this.state = {};\n }\n\n componentDidMount = () => {\n hideSpinnerOverlay();\n\n trackErrorPageIM({\n pageSpec: PAGE_SPEC.UNILATERAL_ERROR_PAGE,\n errorCode: 'UNILATERAL_ERROR',\n });\n };\n\n render() {\n return (\n <div\n className={`donate_wrapper confirmation ${\n isMobileOrInContext() ? 'mobile_view' : ''\n }`}\n >\n <Row align=\"center\">\n <Illustration type=\"warning\" />\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationBody message={noAccountErrorMessage} />\n </Col>\n </Row>\n </div>\n );\n }\n}\n\nexport default withRouter(withTheme(UnilateralError));\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData, { localsMessages } from '../../utility/getTemplateData';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { Button } from '@paypalcorp/pp-react';\nimport Illustration from '../../components/illustrations/Illustration';\nimport ConfirmationTitle from '../../confirmation/ConfirmationTitle';\nimport ConfirmationBody from '../../confirmation/ConfirmationBody';\nimport { isMobileOrInContext } from '../../utility/inContextDonation';\nimport { isExternalFlow } from '../../utility/productIntegrationUtils';\nimport CloseButton from '../../components/CloseButton';\nimport { Row, Col } from '@paypalcorp/pp-react';\n\nclass ThreeDSError extends React.Component {\n componentDidMount = () => {\n hideSpinnerOverlay();\n };\n\n handleTryAgain = () => {\n this.props.history.push(`/donate?token=${templateData.token}`);\n };\n\n render() {\n const error = localsMessages('errors/threeDSError');\n\n return (\n <div>\n <div\n className={`donate_wrapper confirmation ${\n isMobileOrInContext() ? 'mobile_view' : ''\n }`}\n >\n {isExternalFlow() && <CloseButton />}\n <Row>\n <Col align=\"center\">\n <Illustration type=\"warning\" />\n </Col>\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationTitle message={error.errorMessage} />\n </Col>\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationBody message={error.tryAgain} />\n </Col>\n </Row>\n\n <Row>\n <Col className=\"text-center\">\n <Button\n className=\"btn-wide\"\n id=\"tryAgain\"\n onClick={this.handleTryAgain}\n >\n {error.tryCard}\n </Button>\n </Col>\n </Row>\n </div>\n </div>\n );\n }\n}\n\nexport default withRouter(withTheme(ThreeDSError));\n","import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { getParameterByName } from '../utility/queryStringHelper';\nimport withDonate from './guest/WithDonate';\nimport * as AppActions from '../actions/AppActions';\nimport AppStore from '../stores/AppStore';\nimport _get from 'lodash/get';\nimport templateData from '../utility/getTemplateData';\nimport { isLoggedInUser, isOneTouchUser } from '../utility/authUtils';\nimport { trackCaptureOrderPageIM } from '../fpti/fpti';\n\nclass CaptureOrder extends Component {\n constructor(props) {\n super(props);\n this.state = {\n token: '',\n accessToken: '',\n isSubmitted: false,\n backBtnVisible: false,\n responseData: '',\n wTransactionEntry: '',\n requestError: '',\n };\n }\n\n componentDidMount() {\n this.props.toggleSpinner(true);\n const donateToken = getParameterByName('dtoken');\n const orderToken = getParameterByName('token');\n const payerID = getParameterByName('PayerID');\n\n this.captureOrder(orderToken, donateToken, payerID);\n }\n\n captureOrder = (orderToken, donateToken, payerID) => {\n const { orderStatus } = AppStore.getOrderStatus() || {};\n const { token } = templateData;\n\n if (orderStatus === 'COMPLETED') {\n window.location.href = `/donate/paymentComplete?token=${token}`;\n return;\n }\n\n this.props\n .captureOrder(orderToken, donateToken, payerID)\n .then((response) => response.json())\n .then((result) => {\n const confirmationNumber =\n _get(result, 'data.confirmationData.confirmationNumber') ||\n _get(result, 'data.confirmationData.postBackData.txn_id');\n if (!confirmationNumber) {\n this.props.history.push(`/donate/error/payment?token=${token}`);\n return;\n }\n\n AppActions.updateOrderStatus({ orderStatus: 'COMPLETED' });\n\n const isMemberFlow = isLoggedInUser() || isOneTouchUser();\n const confirmationData = _get(result, 'data.confirmationData', {});\n this.handlePaymentSuccess(confirmationData, isMemberFlow);\n })\n .catch(() => {\n this.props.history.push(`/donate/error/payment?token=${token}`);\n });\n };\n\n handlePaymentSuccess = (response, isMemberFlow) => {\n AppActions.updateConfirmation({ confirmation: response });\n this.handleConfirmation(response, isMemberFlow);\n };\n\n handleConfirmation = (response, isMemberFlow) => {\n const { token } = templateData;\n const flow = isMemberFlow ? 'member' : 'guest';\n const page = response.isOfacPending ? 'pending' : 'confirmation';\n const url = token\n ? `/donate/${flow}/${page}/?token=${token}`\n : `/donate/${flow}/${page}`;\n\n trackCaptureOrderPageIM({\n flow,\n confirmationData: response,\n });\n\n this.props.history.push(url);\n };\n\n render() {\n return null;\n }\n}\n\nCaptureOrder.propTypes = {\n toggleSpinner: PropTypes.func,\n captureOrder: PropTypes.func,\n history: PropTypes.object,\n};\n\nexport default withDonate(CaptureOrder);\n","import { useEffect } from 'react';\nimport templateData from '../utility/getTemplateData';\n\nlet timerCount = 0;\nexport default function CancelAndReturnOrder() {\n const redirectToCancelUrl = () => {\n const { charityCancelUrl } = templateData;\n if (charityCancelUrl) {\n window.location.href = charityCancelUrl;\n }\n };\n\n useEffect(() => {\n // xprops takes a few miliseconds to be populated\n // because it has to set up the communication with host window\n // Wait a maximum of 2 seconds for the value\n waitForXProps(() => {\n // No xprops for 2 seconds\n // Maybe we are not inContext?\n // Redirect to cancel url\n redirectToCancelUrl();\n });\n }, []);\n\n function waitForXProps(callback) {\n timerCount++;\n if (timerCount > 10) {\n callback();\n return;\n }\n if (!window.xprops) {\n setTimeout(() => {\n waitForXProps(callback);\n }, 200);\n } else {\n window.xprops.close();\n }\n }\n\n return null;\n}\n","import './publicPath';\n\nimport 'consumerweb-shim';\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport '../utility/bootstrap';\nimport React, { Component, Suspense, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Route, Switch, Router } from 'react-router-dom';\nimport history from './configureHistory';\nimport CookiedUserPage from './../pages/landing/landing';\nimport CampaignLanding from '../pages/landing/campaignLanding';\nimport Review from './../pages/guest/GuestReview';\nimport {\n GuestConfirmationPending,\n GuestConfirmationSuccess,\n} from '../pages/guest/confirmation';\nimport PaymentError from './../pages/error/paymentError';\nimport UnilateralError from '../pages/error/UnilateralError';\nimport templateData from './../utility/getTemplateData';\nimport { isOneTouchUser, isAuthenticatedUser } from 'utility/authUtils';\nimport { parseUrlQuery } from '../utility/urlUtils';\nimport { setShouldRTL } from '../utility/paypalAphrodite';\nimport { showSpinnerOverlay, hideSpinnerOverlay } from '../utility/helper';\nimport ThreeDSError from '../pages/error/threeDSError';\nimport { reactLazyPreload } from '../utility/lazyLoader';\nimport CaptureOrder from '../components/CaptureOrder';\nimport CancelAndRedirectOrder from '../components/CancelAndRedirectOrder';\nimport {\n MemberConfirmationPending,\n MemberConfirmationSuccess,\n} from '../pages/member/confirmation';\nimport Footer from '../components/footer/footer';\n\nimport '../../css/ppvx.less';\nimport '../../css/ppvx-app.less';\nimport '../../css/portable-onboarding.less';\nimport { addClass, removeClass } from '../utility/domUtils';\nimport {\n isGNC,\n isPPCampaign,\n isCampaigns,\n} from '../utility/productIntegrationUtils';\n\n// set the direction for styles (whether to convert them to RTL)\nconst { locality: { directionality = 'ltr' } = {} } = templateData;\nsetShouldRTL(directionality !== 'rtl');\n\nconst { currentUserState, isUnilateralAccount, paymentStatus } = templateData;\n\nconst GuestPage = reactLazyPreload(() =>\n import(/* webpackChunkName: \"GuestPage\" */ './../pages/guest/guest')\n);\n\nfunction FallbackSpinner() {\n useEffect(() => {\n showSpinnerOverlay();\n }, []);\n\n return <></>;\n}\n\nclass LandingPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n userCookied: currentUserState === 'cookied',\n isOneTouch: isOneTouchUser(),\n };\n }\n\n componentDidMount() {\n if (!(isGNC() || isPPCampaign())) {\n addClass('#mainWrapper', ['landing-page']);\n }\n\n if (isUnilateralAccount) {\n history.push('/donate/error/noaccount');\n return;\n }\n // Only hiding spinner for cookied user and if payment token status is not complete\n if (this.state.userCookied && paymentStatus !== 'complete') {\n // In case of onboarding, guest.js will hide the spinner\n if (!templateData.onboardingEnabled) {\n hideSpinnerOverlay();\n }\n }\n\n if (!isAuthenticatedUser()) {\n GuestPage.preload();\n }\n }\n componentWillUnmount() {\n if (!(isGNC() || isPPCampaign())) {\n removeClass('#mainWrapper', ['landing-page']);\n }\n }\n\n getPageToRender() {\n // If `signup` param is present, render GuestPage\n const isSignupRoute = !!parseUrlQuery().signup;\n if (isSignupRoute) {\n return <GuestPage />;\n }\n return <CookiedUserPage />;\n }\n\n render() {\n return <div>{this.getPageToRender()}</div>;\n }\n}\n\nfunction CampaignLandingPage() {\n const getPageToRender = () => {\n // If `signup` param is present, render GuestPage\n const isSignupRoute = !!parseUrlQuery().signup;\n if (isSignupRoute) {\n return <GuestPage />;\n }\n return <CampaignLanding />;\n };\n\n return <>{getPageToRender()}</>;\n}\n\nReactDOM.render(\n <Router history={history}>\n <Suspense fallback={<FallbackSpinner />}>\n <Switch>\n <Route\n exact\n path=\"/donate\"\n component={isCampaigns() ? CampaignLandingPage : LandingPage}\n />\n <Route exact path=\"/donate/capture\" component={CaptureOrder} />\n <Route\n exact\n path=\"/donate/orders/cancel\"\n component={CancelAndRedirectOrder}\n />\n <Route exact path=\"/donate/guest\" component={GuestPage} />\n <Route exact path=\"/donate/guest/crossborder\" component={Review} />\n <Route\n exact\n path=\"/donate/guest/confirmation\"\n component={GuestConfirmationSuccess}\n />\n <Route\n exact\n path=\"/donate/guest/pending\"\n component={GuestConfirmationPending}\n />\n <Route\n exact\n path=\"/donate/member/confirmation\"\n component={MemberConfirmationSuccess}\n />\n <Route\n exact\n path=\"/donate/member/pending\"\n component={MemberConfirmationPending}\n />\n <Route exact path=\"/donate/error/payment\" component={PaymentError} />\n <Route\n exact\n path=\"/donate/error/noaccount\"\n component={UnilateralError}\n />\n <Route exact path=\"/donate/error/threeDS\" component={ThreeDSError} />\n </Switch>\n </Suspense>\n <Footer />\n </Router>,\n document.getElementById('donateWrapper')\n);\n","import TemplateData from './getTemplateData';\nimport { lazy as reactLazy } from 'react';\nimport { trackErrorIM } from '../fpti/fpti';\n\n/**\n * Loads bodymovin and hearts animation json\n */\nexport function loadBodyMovin() {\n if (\n typeof window.bodymovin !== 'undefined' &&\n typeof window.heartsAnimationData !== 'undefined'\n ) {\n return Promise.resolve([window.bodymovin, window.heartsAnimationData]);\n }\n return Promise.all([\n loadScript(\n 'https://www.paypalobjects.com/donate/bodymovin/bodymovin.min.js'\n ),\n loadScript('https://www.paypalobjects.com/donate/bodymovin/hearts.js'),\n ]).catch((error) => {\n trackErrorIM({\n errorCode: 'LAZY_LOAD_FAILED',\n errorMessage: error,\n fieldName: 'bodymovin',\n });\n });\n}\n\n/**\n * Load Progressive Onboarding component (Slick Version)\n */\nexport function loadSlickProgressiveOnboarding() {\n return Promise.all([\n import(\n /* webpackChunkName: 'ProgressiveonboardingSlick' */ 'portableonboarding'\n ),\n ]).catch((error) => {\n trackErrorIM({\n errorCode: 'LAZY_LOAD_FAILED',\n errorMessage: error,\n fieldName: 'progressive_slick',\n });\n });\n}\n\n// eslint-disable-next-line\nfunction loadScript(scriptPath) {\n return new Promise((resolve, reject) => {\n const nonce = TemplateData.nonce;\n var script = document.createElement('script');\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = function (params) {\n resolve(params);\n };\n script.onerror = function (params) {\n reject(params);\n };\n script.nonce = nonce;\n script.src = scriptPath;\n });\n}\n\nexport function waitForOnload() {\n return new Promise((resolve) => {\n if (document.readyState === 'complete') {\n resolve();\n } else {\n window.addEventListener('load', () => {\n resolve();\n });\n }\n });\n}\n\n/**\n * Lazy load a React component and add preload option\n */\nexport function reactLazyPreload(importStatement) {\n const lazyComponent = reactLazy(importStatement);\n lazyComponent.preload = importStatement;\n return lazyComponent;\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.genericPropType = genericPropType;\nexports.cardSpecsPropType = cardSpecsPropType;\nexports.cardSpecPropType = cardSpecPropType;\nexports.stateListPropType = stateListPropType;\n/**\n * PropType Validators\n */\n\n/**\n * Awesome generic PropType validator\n * Basically just checks if the prop provided is defined\n * - needed for checking connected components passed as props\n * @param {Object} props component props\n * @param {String} propName propName we're validating\n * @param {String} componentName the component\n * @return {Error} a new error or null if there's no error\n */\nfunction genericPropType(props, propName, componentName) {\n\tif (props[propName] === undefined) {\n\t\treturn new Error(\"Invalid prop `\" + propName + \"` supplied to `\" + componentName + \"`. Validation failed.\");\n\t}\n\treturn null;\n}\n\n/**\n * cardSpecs PropType validator\n * @param {Object} props - component props\n * @param {String} propName - propName we're validating (cardSpec)\n * @param {String} componentName - the component\n * @return {Error} - a new error or null if there's no error\n */\nfunction cardSpecsPropType(props, propName, componentName) {\n\tvar cardSpecs = props[propName];\n\tif (!cardSpecs) {\n\t\treturn new Error(\"Required prop `\" + propName + \"` was not specified in `\" + componentName + \"`. Please supply the config object you get back consumerweb-card.\");\n\t} else if (!cardSpecs.cardTypes || cardSpecs.cardTypes && !Object.keys(cardSpecs.cardTypes).length) {\n\t\treturn new Error(\"Invalid prop `\" + propName + \"` supplied to `\" + componentName + \"`. Please supply the config object you get back consumerweb-card.\");\n\t}\n\treturn null;\n}\n\n/**\n * cardSpec PropType validator\n * @param {Object} props - component props\n * @param {String} propName - propName we're validating (cardSpec)\n * @param {String} componentName - the component\n * @return {Error} - a new error or null if there's no error\n */\nfunction cardSpecPropType(props, propName, componentName) {\n\tvar cardSpec = props[propName];\n\tif (!cardSpec) {\n\t\treturn new Error(\"Required prop `\" + propName + \"` was not specified in `\" + componentName + \"`. Please supply the config object you get back consumerweb-card.\");\n\t} else if (!cardSpec.fields || !cardSpec.type) {\n\t\treturn new Error(\"Invalid prop `\" + propName + \"` supplied to `\" + componentName + \"`. Please supply the config object you get back consumerweb-card.\");\n\t}\n\treturn null;\n}\n\n/**\n * stateList PropType validator\n * @param {Object} props - component props\n * @param {String} propName - propName we're validating (stateList)\n * @param {String} componentName - the component\n * @return {Error} - a new error or null if there's no error\n */\nfunction stateListPropType(props, propName, componentName) {\n\tvar stateList = props[propName];\n\n\t// if we don't get the array of states we're expecting from Griffin, return an error\n\tif (!stateList) {\n\t\treturn new Error(\"Required prop `\" + propName + \"` was not specified in `\" + componentName + \"`. Please supply the array you get back from griffin.formatCoarseAddress().\");\n\t} else if (!Array.isArray(stateList) || stateList.length && !stateList[0].$id) {\n\t\treturn new Error(\"Invalid prop `\" + propName + \"` supplied to `\" + componentName + \"`. Please supply the array you get back from griffin.formatCoarseAddress().\");\n\t}\n\treturn null;\n}"],"sourceRoot":""}