{"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:///./components/threeDS/ThreeDSSpinner.js","webpack:///./components/threeDS/ThreeDSDeviceDataCollection.js","webpack:///./components/threeDS/ThreeDSIframe.js","webpack:///./components/threeDS/ThreeDSContainer.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:////home/jenkins/agent/workspace/donate-gro-release/lib/geoUtils.js","webpack:///./components/landing/OneTouchNextButton.js","webpack:///./components/guestButton.js","webpack:///./components/recurring-checkbox/RecurringInfo.js","webpack:///./components/recurring-checkbox/recurring-checkbox.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"],"names":["styles","StyleSheet","create","modalContent","maxWidth","margin","okButton","marginTop","msgMargin","DonateGiftAidHowItWorksOverlay","props","orgName","className","overpanel","title","isOpen","onClose","closeOverlay","hideLogo","closeOnBackgroundClick","id","css","src","appendCdnHostName","size","onClick","propTypes","PropTypes","string","bool","func","DonateGiftAid","isAlreadyEnrolled","isChecked","handleGiftAidOption","addressData","showAddress","giftaidInfo","useState","showHelp","setShowHelp","checked","setChecked","isHowItWorksOverlayOpen","setIsHowItWorksOverlayOpen","donateGiftPercentage","donationCode","currency","amount","useEffect","value","openHowItWorksOverlay","alt","extraAmount","normalizeNumber","toFixed","formatCurrency","type","tertiary","label","name","onChange","env","checkedValue","target","strong","fullName","address1","address2","city","state","zip","openOverlay","any","object","isMember","STYLES","error","color","PAYPAL_THEME","sysColorUnselectedContrast","fontSize","criticalIcon","position","marginRight","AmountValidationError","this","errorSourceField","errorString","errorCode","trackErrorIM","errorMessage","fieldName","style","role","data-testid","Component","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","match","validateAmount","handleFromChange","handleToChange","handleFromCurrencyChange","setFromSymbol","event","handleAmountFocus","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","PresetAmountRow","worldready","useContext","WorldReadyContext","presetOther","MessageFormat","format","placeholderOtherAmount","templateData","presetAmounts","setPresetAmounts","AppStore","getDonationAmountType","getDonationAmount","selectedOption","setSelectedOption","showOtherAmount","setShowOtherAmount","handlePresetAmountClick","selectedAmount","getNormalizedNumber","handleAmountChange","hideValidationError","AppActions","amountBeforeFee","getAmountBeforeFee","isOptInCoverFee","shouldSelectPresetAmount","values","charityAmountCode","rightSymbol","result","amountFieldValue","Number","charityAmount","presetOptions","getCurrencyParts","$","formatAmountFromServerDNW","noDecimals","secondaryLabel","isAmountEditable","showValidationError","validationErrorMessage","checkValue","parseFloat","trackLinkClick","LINK_NAME","PRESET_AMOUNT","additionalData","FPTI_TAGS","SELECTED_PRESET_BUTTON_ID","normalizedAmount","griffin","getGriffin","clientMetadata","__getInitialData","coverFeeOptInStatus","getCoverFeeOptInStatus","isPreview","validationErrorCode","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","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","worldReady","getWorldReady","selectedRecurringFrequency","parse","innerHTML","currencyLists","currencies","symbols","html","getElementsByTagName","directionality","getAttribute","donorIpCountry","US","getDonationCode","isEditable","donationAmountEditable","getDonationSymbol","donationDecimalPoint","nextProps","shouldShowPresetAmounts","renderPresetAmounts","handleUserAmountChange","handleUserCurrencyChange","handleCharityAmountChange","currencySymbol","handleAmount","handleTrackError","getDonationRecurring","getRecurringLabel","CardSecurityCode","showIsRequiredError","securityCode","handleCheckForValue","handleChangeSecurityCode","cardSpec","fields","csc","required","handleFocus","handleBlur","cscSpecs","maxLength","maxlength","pattern","onBlur","errorText","dir","helperText","cardSpecPropType","LOADING_GIF_SOURCE","spinnerAlign","cardImg","ThreeDSSpinner","fundingOptions","getFundingOptions","_get","network","getPaymentCardNetwork","myData","getAllData","_isEmpty","cardType","toLowerCase","hideSpinnerOverlay","setNetworkDetails","context","contextType","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","Date","getTime","onStepUpAuthComplete","hideModal","element","formRef","setTimeout","requestTextMsgFmt","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","initialData","getInitialData","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","defaultCardSpec","ccNumber","expirationDate","minlength","getSpecificCardSpec","cardNumber","cardTypes","RegExp","autodetect","test","PAYMENT_CARDS","NoteFieldError","NoteComponent","lengthLimit","campaignsLabel","providedLabel","isCampaigns","charityNoteEnabled","charityNoteLabel","donationNote","setDonationNote","initialNoteLabel","showLabel","setShowLabel","showError","setShowError","noteLabel","setNoteLabel","textAreaEl","useRef","isNoteTextPresent","current","focus","isNotePreview","contextLocalityDir","isExternalFlow","htmlFor","NOTE_PAD","eventName","EVENT_NAME","DW_GIVING_DONATE_SETUP_COMMENT_PRESSED","svgIconComponent","buttonType","aria-hidden","maxRows","minRows","showCharacterCounter","maxCharacters","addClass","removeClass","trim","AnonymousCheckbox","content","optInStatus","handleAnonymousDonationChange","ANONYMOUS","tooltip","checkboxStatus","anonymousStatus","labelIcon","description","onOpen","ANONYMOUS_TOOLTIP","DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED","setAttribute","NextButtonComponent","branded","handleNext","getCdnHostName","OneTouchNextButton","GuestButton","GUEST","secondary","handleGuest","RecurringInfo","orgname","donationName","isLTR","isLeftToRight","isContinue","wrapper","centered","justifyContent","toolWrapper","paddingBottom","animationWrapper","animationContainer","transform","recurringButton","borderRadius","marginBottom","borderOnly","background","divider","dividerContent","backgroundColor","verticalCentered","alignItems","RecurringCheckBox","dispatcherToken","updateAmount","RECURRING","continue","formatedAmount","formatAmount","showhelp","chkBxStatus","loadAnimation","recurring","RECURRING_CHECKBOX","CHECKBOX","handleChange","__html","loadBodyMovin","isAnimating","animationData","heartsAnimationData","bodymovinLibrary","bodymovin","renderer","loop","autoplay","destroy","sanitizeOrgName","defaultProps","Programs","programNames","isDisabled","selectedProgram","handleSelect","programLabelMsgFmt","Array","isArray","getProgramOptions","options","forEach","programName","primaryText","programOption","findIndex","program","appStore","getSelectedProgram","PROGRAM_SELECTED","CAMPAIGN","RecurringOverlay","closeRecurringOverlay","onMakeOneTimeDonation","onContinue","secondDialogLabel","dialogp2","center","isInContext","BackButton","handleClose","noCloseButton","containerClassName","noThanks_closeModal","disclaimerWrapper","disclaimer","disclaimerCaptionText","NotTaxDeductibleLegalText","dispatcherMessages","isPPCC","setIsPPCC","AppConstants","CoverFeeCheckbox","handleCoverFeeChange","formatedFeeAmount","CTF","checkbox_content","coverFee","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","addShake","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","formattedTotalAmount","subHeaderLabel","isCheckoutRail","handleNextForCheckout","isAuthenticated","showNoteCondition","CHARITY_NOTE","personalizedMessages","getPersonalizedMessages","GN_CONTENT_TOUCHPOINT","amountRaised","campaignTotalAmountRaised","campaignStatus","campaignTargetAmount","campaignEndTime","tabIdx","handleRecurringChange","trackRecurringFrequencySelectionClick","anonymousStatusInStore","getAnonymousStatus","indexOf","hasLogo","charityName","donationId","guestRedirectUrl","recurringHelpText","recurringLabel","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","campaigns","tabs","option","panelId","selectFrequencyTab","tabId","updateConversionSataus","renderProgramsDropdown","getPersonalizedAnonymousContent","getPersonalizedNoteToPayeeLabel","showNote","selectedTab","success","renderDisclaimer","renderDonateButtons","hasPartnerSource","handleRecurringOverlayContinue","handleRecurringOverlayMakeOneTimeDonation","Disclaimer","getPersonalizedContent","organizationName","returnUrl","charityReturnUrl","LandingPage","withWorldReady","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","Flyout","delay","intervalRef","savedCallback","startShowing","setStartShowing","showFlyouts","setShowFlyouts","randomContribution","setRandomContribution","getRandomContribution","max","Math","floor","random","flyoutTimer","clearTimeout","setInterval","clearInterval","hideInterval","formatNumber","currency_code","formatFeatured","contributions","totalContributions","formattedList","first","find","badge","toUpperCase","selfItem","LandingDonorWall","reactLazy","LandingRichTextDisplay","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","throttledFn","throttle","fetchData","productId","handleShowMore","goalAmtWithCurrencySymbol","campaignGoalTitle","goalAmount","getCampaignMessage","formatObj","advancedEndDateBadgeContent","minute","minutes","hour","hours","day","days","month","months","year","years","endsInContent","duration","unit","endedContent","date","renderEndDateBadge","endTime","currentTime","formatDate","parseDateOnly","renderTitle","campaignTitle","renderGoalProgressMeter","round","steps","headerClasses","sticky","renderDonorWall","endDate","totalNumberOfTransactions","setHours","renderContributionsError","stickyHeader","social_title","getSocialMessage","incrementDescription","incrementedHeight","Content","maxHeight","descriptionContainer","clientHeight","fallback","campaignDescription","ConfirmationSocialShare","social","emailSubject","emailBody","mobileText","facebookMessage","twitterMessage","whatsappMessage","copyLinkHeader","copyLinkSubheaderBefore","copyLinkSubheader","copiedText","copyText","subheader","shareGeneric","donationEmail","lg","trackDonateLandingButtonClick","mobileFixedHeight","wrapperClassName","skipFormFocus","CVVComponent","getCardSpec","errorMessageCSC","handleSecurityCodeChange","fieldRequired","fieldInvalid","newErrorState","validateInputValue","cscLen","cscMax","cscLabel","handleFieldFocus","handleFieldBlur","PaymentInformation","paymentDigits","paymentType","issuer","isPaypalCurrencyConversion","funds","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","PaypalAppIcon","CreditCardIcon","rate","as","CurrencyConversionModal","withPaypaltitle","withPaypalRate","withPaypalmessage","withCardtitle","withCardmessage","CURRENCY_CONVERSION_OPTIONS","isPayPalSelected","setPaypalSelected","ISSUER","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","FeePricing","feeAmounts","openHelperSheet","setOpenHelperSheet","paymentAmount","payment_amount","totalFee","total_fee","totalAmountPaid","total_amount_paid","getGiftAidItExtraAmount","GuestReview","spinnerOverlay","endCPLTracking","observeUntilEventObserved","attributes","observer","disconnect","formatCurrencyAsString","showCurrencyConversionModal","isCurrencyConversionModalOpen","showCVVField","cvv","childCVVInfo","getElementsByClassName","processDonation","threeDSContainer","initializeThreeDS","trackGuestReviewPageDonateClick","isCvvSend","giftAidState","track3DSProceedToPayment","isRecurring","stateConversionWithPayPal","getStateForConversionWithPayPal","endCustomCPLTracking","paymentNetwork","last_4","currency_conversion","toString","fundsIn","funds_in","fundsOut","funds_out","fee_amount","paymentCard","issuerName","inAmount","outAmount","outSymbol","currencyConversion","fundingCode","getStateForConversionWithIssuer","currencyConversionType","paymentCardId","preferences","payment_card_id","validity","consentShareAddress","getShareAddress","hasCvvContingency","isCvvContingencyResolved","updateFundingOptionsState","giftaidFlag","isGiftaiditEnabled","form","isPPUnlistedCampaign","handleDonateClick","handleThreeDSStepUpAuthSuccess","handleThreeDSFailure","GuestConfirmationPending","withPageTrack","withPostTransactionRequest","PendingView","GuestConfirmationSuccess","SuccessView","body2","linkLabel","handleLinkClick","buttonLabel","handleButtonClick","showCloseButton","centerBody","PaymentError","ERROR_CODE","getPaymentError","trackErrorPageIM","GUEST_FAILURE_PAGE","WENT_WRONG","TEMP_GLITCH","tryagain","getErrorMessage","customerServiceLink","handleTryAgain","UnilateralError","UNILATERAL_ERROR_PAGE","noAccountErrorMessage","align","Illustration","ConfirmationBody","message","ThreeDSError","ConfirmationTitle","CaptureOrder","orderStatus","getOrderStatus","isMemberFlow","isOneTouchUser","handlePaymentSuccess","handleConfirmation","flow","trackCaptureOrderPageIM","accessToken","isSubmitted","backBtnVisible","responseData","wTransactionEntry","requestError","timerCount","CancelAndReturnOrder","waitForXProps","xprops","close","charityCancelUrl","locality","setShouldRTL","currentUserState","isUnilateralAccount","GuestPage","reactLazyPreload","FallbackSpinner","userCookied","isOneTouch","isGNC","isPPCampaign","preload","parseUrlQuery","signup","getPageToRender","CampaignLandingPage","RouterWithWorldReady","exact","path","component","CancelAndRedirectOrder","Review","MemberConfirmationSuccess","MemberConfirmationPending","ReactDOM","render","all","loadScript","loadSlickProgressiveOnboarding","scriptPath","reject","nonce","script","createElement","appendChild","onerror","readyState","importStatement","lazyComponent"],"mappings":"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","file":"donate.8facb67f1efad681566f.bundle.js","sourcesContent":["import React from 'react';\nimport { Sheet, BodyText, Button, HeadingText } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from 'aphrodite';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { appendCdnHostName } from '../utility/geoUtils';\nimport { Message } from '@paypalcorp/worldready-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 { orgName } = props;\n\n return (\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n
\n \n
\n \n
\n
\n
\n
\n \n );\n}\n\nDonateGiftAidHowItWorksOverlay.propTypes = {\n orgName: PropTypes.string,\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';\nimport MessageWithHTML from '../components/MessageWithHtml';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { normalizeNumber, formatCurrency } from '../utility/formator';\n\nconst DonateGiftAid = ({\n isAlreadyEnrolled,\n isChecked,\n handleGiftAidOption,\n addressData,\n showAddress,\n giftaidInfo,\n}) => {\n const [showHelp, setShowHelp] = useState(isChecked);\n const [checked, setChecked] = useState(isChecked);\n const [isHowItWorksOverlayOpen, setIsHowItWorksOverlayOpen] = useState(false);\n const { donateGiftPercentage, donationCode, currency, amount, orgName } =\n giftaidInfo;\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 const getGiftAidExtraAmount = () => {\n const value = (donateGiftPercentage * normalizeNumber(amount)).toFixed(2);\n const extraAmount = formatCurrency({ value, currency: donationCode });\n return extraAmount;\n };\n\n return (\n
\n
\n \n \n \n \n \n \n \n\n {isAlreadyEnrolled && (\n
\n \n \n \n \n
\n )}\n {!isAlreadyEnrolled && (\n }\n name=\"giftaidCheckbox\"\n id=\"giftaidCheckbox\"\n className=\"inline-block\"\n onChange={handleCheckbox}\n checked={checked}\n />\n )}\n\n {showHelp && (\n
\n
\n \n \n \n
\n {showAddress && (\n
\n \n \n \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 \n \n \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 giftaidInfo: PropTypes.object,\n isMember: PropTypes.bool,\n};\n\nexport default DonateGiftAid;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { CriticalIcon } from '@paypalcorp/pp-react-icons';\nimport { PAYPAL_THEME } from '@paypalcorp/pp-react-theme';\nimport { trackErrorIM } from '../../fpti/fpti';\n\nconst { sysColorUnselectedContrast } = PAYPAL_THEME;\n\nconst STYLES = {\n error: {\n color: sysColorUnselectedContrast,\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, useContext } 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 { formatCurrency, getCurrencyParts } from '../../utility/formator';\nimport { formatAmountFromServerDNW, getNormalizedNumber } from './amountUtils';\nimport { getGriffin, __getInitialData } from '../../utility/formator';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nfunction PresetAmountRow(props) {\n const worldready = useContext(WorldReadyContext);\n let presetOther = new MessageFormat(worldready, {\n id: 'common.amount.amount.presetOther',\n }).format();\n let placeholderOtherAmount = new MessageFormat(worldready, {\n id: 'common.amount.amount.placeholderOtherAmount',\n }).format();\n\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 // To be consistent with the hero currency component\n // we need to update donationAmount in store with only\n // normalized number\n const selectedAmount = getNormalizedNumber(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 // To be consistent with the hero currency component\n // we need to update donationAmount in store with only\n // normalized number\n const normalizedAmount = getNormalizedNumber(amount);\n props.handleAmountChange(`${normalizedAmount}`);\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 // Since only normalized amount is being saved in store\n // we need to format the amount before displaying in the\n // other amount field\n const amountFieldValue =\n AppStore.getDonationAmountType() === 'preset'\n ? ''\n : formatCurrency({\n currency: props.charityAmountCode,\n value: Number(props.charityAmount),\n });\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 TemplateData from '../utility/getTemplateData';\nimport { fetcher } from '../utility/domUtils';\nimport { SingleAmount } from '@paypalcorp/donate-react';\nimport { BodyText } from '@paypalcorp/pp-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 { __getInitialData } from '../utility/formator';\nimport { trackErrorIM } from '../fpti/fpti';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\nimport { getWorldReady } from '../utility/worldReadyUtils';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nclass AmountWrapper extends React.Component {\n constructor(props) {\n super(props);\n const currencyObj = JSON.parse(\n document.getElementById('currencyLists').innerHTML || {}\n );\n const { currencies: currencyLists, symbols: currencySymbols } =\n currencyObj || {};\n const html = document.getElementsByTagName('html')[0];\n this.directionality = html.getAttribute('dir');\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 const worldReady = getWorldReady();\n switch (this.props.selectedRecurringFrequency) {\n case 'Week':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perWeek',\n }).format();\n case 'Month':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perMonth',\n }).format();\n case 'Year':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perYear',\n }).format();\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 \n {AppStore.getDonationRecurring() === 'checked' && (\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","import React, { Component } from 'react';\nimport AppStore from '../../stores/AppStore';\nimport _get from 'lodash/get';\nimport { getPaymentCardNetwork } from '../../utility/card-utils';\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';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\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\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 const worldReady = this.context;\n return (\n
\n
\n
\n {/*
*/}\n
\n \n
\n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.confirmingWith',\n }).format({\n network: this.state.network,\n })}\n \n
\n {this.state.cardImg ? (\n \"Card\n ) : (\n ''\n )}\n
\n
\n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.wontTakeLong',\n }).format()}\n \n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.DoNotCloseOrRefresh',\n }).format()}\n \n
\n
\n
\n
\n );\n }\n}\n\nThreeDSSpinner.contextType = WorldReadyContext;\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.contextType = WorldReadyContext;\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","import React, { Component } from 'react';\nimport templateData 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';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../../utility/worldReadyUtils';\n\nconst initialData = getInitialData();\n\nconst ERROR_ELEMENT_SELECTOR = [\n '.vx_has-error-with-message',\n '.service_error_holder',\n].join();\n\nfunction withDonate(WrappedComponent) {\n const worldReady = getWorldReady();\n\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: new MessageFormat(worldReady, {\n id: `errors.service.${errorCode}`,\n }).format(),\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.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 { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from './worldReadyUtils';\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 const worldReady = getWorldReady();\n switch (source.network) {\n case PAYMENT_CARDS.VISA:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.visa',\n }).format();\n case PAYMENT_CARDS.MASTERCARD:\n case PAYMENT_CARDS.MASTER_CARD:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.mastercard',\n }).format();\n case PAYMENT_CARDS.MAESTRO:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.maestro',\n }).format();\n case PAYMENT_CARDS.AMEX:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.amex',\n }).format();\n case PAYMENT_CARDS.DISCOVER:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.discover',\n }).format();\n case PAYMENT_CARDS.CHINA_UNION_PAY:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.china_union_pay',\n }).format();\n default:\n return source.network;\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CriticalIcon } from '@paypalcorp/pp-react-icons';\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, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport templateData 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, AddIcon } from '@paypalcorp/pp-react';\nimport NoteFieldError from './NoteFieldError';\nimport { trackLinkClick } from '../fpti/fpti';\nimport { LINK_NAME } from '../fpti/fptiConstants';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst MAX_CHAR_LIMIT = 250;\n\nfunction NoteComponent(props) {\n const worldReady = useContext(WorldReadyContext);\n\n let label = new MessageFormat(worldReady, {\n id: 'common.note.note.label',\n }).format();\n let lengthLimit = new MessageFormat(worldReady, {\n id: 'common.note.note.error.lengthLimit',\n }).format();\n let campaignsLabel = new MessageFormat(worldReady, {\n id: 'common.note.note.campaigns.label',\n }).format();\n\n let providedLabel = isCampaigns() ? campaignsLabel : label;\n\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 { Button } from '@paypalcorp/pp-react';\nimport { appendCdnHostName } from '../../../lib/geoUtils';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass NextButtonComponent extends React.Component {\n render() {\n return (\n \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 location from '@paypalcorp/instance-location';\n\nexport const appendCdnHostName = (url) => {\n return `https://${location.getCdnHostName()}${url}`;\n};\n\nexport const getCdnHostName = () => {\n return `https://${location.getCdnHostName()}`;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass OneTouchNextButton extends React.Component {\n render() {\n return (\n \n \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 { Button } from '@paypalcorp/pp-react';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass GuestButton extends React.Component {\n componentDidMount() {\n addFeature(FEATURES.GUEST);\n }\n\n render() {\n return (\n \n \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 MessageWithHTML from '../MessageWithHtml';\nexport default function RecurringInfo({ orgName, amount }) {\n return (\n \n \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 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 { 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';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\nconst isLTR = isLeftToRight();\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 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 const checked = { checked: false };\n if (this.props.status) {\n checked.checked = true;\n }\n const worldReady = this.context;\n return (\n \n \n \n
\n {isContinue ? (\n
\n \n {new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.perMonth',\n }).format()}\n \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}\nRecurringCheckBox.contextType = WorldReadyContext;\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","import React, { useState, useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\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';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nconst Programs = ({ programNames, isDisabled }) => {\n const worldReady = useContext(WorldReadyContext);\n const [selectedProgram, handleSelect] = useState('');\n const programLabelMsgFmt = new MessageFormat(worldReady, {\n id: 'common.programs.programs.optional',\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 value: programName,\n });\n });\n\n return options;\n };\n\n const updateProgramId = (event) => {\n const {\n target: { value },\n } = event;\n handleSelect(value);\n AppActions.updateSelectedProgram(value);\n trackLinkClick(LINK_NAME.PROGRAM_SELECTED, {\n additionalData: {\n [FPTI_TAGS.CAMPAIGN]: value,\n },\n });\n };\n\n useEffect(() => {\n if (isDisabled) {\n handleSelect(programNames[0]);\n }\n }, [JSON.stringify(programNames)]);\n\n useEffect(() => {\n if (isDisabled) {\n return;\n }\n\n let programOption = getProgramOptions().findIndex(\n (program) => program.primaryText === appStore.getSelectedProgram()\n );\n programOption = programOption === -1 ? 0 : programOption;\n handleSelect(programNames[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 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';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\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 secondDialogLabel = 'dialogp2';\n\n switch (this.props.selectedRecurringFrequency) {\n case 'WEEK':\n secondDialogLabel = 'dialogp2Week';\n break;\n case 'YEAR':\n secondDialogLabel = 'dialogp2Year';\n break;\n default:\n secondDialogLabel = 'dialogp2';\n break;\n }\n\n const dialogp2MsgFmt = new MessageFormat(this.context, {\n id: `common.recurring-checkbox.rp.${secondDialogLabel}`,\n });\n const dialogp2 = dialogp2MsgFmt.format({\n orgName: sanitizeOrgName(orgname),\n });\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 \n \n \n \n \n\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n {dialogp2}\n
\n
\n
\n \n \n \n
\n
\n \n
\n\n
\n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n
\n
\n \n );\n }\n}\nRecurringOverlay.contextType = WorldReadyContext;\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 AppDispatcher from '../dispatcher/AppDispatcher';\nimport * as AppConstants from '../utility/constants';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst styles = StyleSheet.create({\n disclaimerWrapper: {\n maxWidth: 350,\n margin: 'auto',\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 \n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport { DonateCheckbox } from '@paypalcorp/donate-react';\nimport { addFeature } from '../../fpti/helper';\nimport { FEATURES } from '../../fpti/fptiConstants';\nimport MessageWithHTML from '../MessageWithHtml';\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 value={optInStatus}\n onChange={handleChange}\n checked={optInStatus}\n disabled={isDisabled || false}\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';\nimport PropTypes from 'prop-types';\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 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 { addFeature } from '../../fpti/helper';\nimport withWorldReady from '../../components/withWorldReady';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../../utility/worldReadyUtils';\nimport MessageWithHTML from '../../components/MessageWithHtml';\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 let selectedTabIdx = '';\n if (templateData.supportedRecurringFrequencies) {\n switch (AppStore.getSelectedRecurringFrequency()) {\n case 'Week':\n selectedTabIdx =\n templateData.supportedRecurringFrequencies.indexOf('WEEK');\n break;\n case 'Month':\n selectedTabIdx =\n templateData.supportedRecurringFrequencies.indexOf('MONTH');\n break;\n case 'Year':\n selectedTabIdx =\n templateData.supportedRecurringFrequencies.indexOf('YEAR');\n break;\n default:\n selectedTabIdx =\n templateData.supportedRecurringFrequencies.indexOf('ONE_TIME');\n break;\n }\n }\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: selectedTabIdx,\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 =\n amountUtils.validateMinimumDonationAmount('common.amount');\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 +Number(AppStore.getDonationAmount()) +\n +normalizeNumber(AppStore.getFeeAmount());\n } else {\n totalAmount = +Number(AppStore.getDonationAmount());\n }\n\n const formattedTotalAmount = formatAmount({\n currency: templateData.donationCode,\n value: totalAmount,\n });\n\n return (\n \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 const worldReady = getWorldReady();\n const supportedRecurringFrequencies =\n this.state.supportedRecurringFrequencies?.map((freq) => {\n switch (freq) {\n case 'ONE_TIME':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.oneTime',\n }).format();\n case 'WEEK':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.weekly',\n }).format();\n case 'YEAR':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.yearly',\n }).format();\n default:\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.monthly',\n }).format();\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 \n \n );\n case showNoDonationText:\n return (\n \n \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\nLandingPageComponent.propTypes = {\n history: PropTypes.object,\n};\n\nLandingPageComponent.contextType = WorldReadyContext;\n\nconst LandingPage = withRouter(\n withWorldReady(withDonate(withTheme(LandingPageComponent)))\n);\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\nLanding.propTypes = {\n history: PropTypes.object,\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 { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../utility/worldReadyUtils';\nimport _isEmpty from 'lodash/isEmpty';\n\nconst WhosDonatedBanner = ({\n numberOfContributors,\n contributionsList,\n isLoading,\n}) => {\n let label;\n const worldReady = getWorldReady();\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 ? new MessageFormat(worldReady, {\n id: `landing.campaigns.oneAnonymousDonorMessage`,\n }).format()\n : new MessageFormat(worldReady, {\n id: `landing.campaigns.oneDonorMessage`,\n }).format({\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 ? new MessageFormat(worldReady, {\n id: `landing.campaigns.donorMessage`,\n }).format({\n numberOfContributors: numberOfContributors,\n })\n : new MessageFormat(worldReady, {\n id: `landing.campaigns.twoDonorsMessage`,\n }).format({\n donorOneName: donorOneName,\n donorTwoName: donorTwoName,\n });\n } else {\n label = new MessageFormat(worldReady, {\n id: `landing.campaigns.donorMessage`,\n }).format({\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 MessageWithHTML from './MessageWithHtml';\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 (\n \n );\n } else if (randomContribution.shareDonorInfo === false) {\n return (\n \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, useContext } from 'react';\nimport templateData from '../../utility/getTemplateData';\nimport PPCC from '../../components/ppcc/ppcc';\nimport {\n Card,\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 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 { MAX_MOBILE_WIDTH } from '../../setup/clientConstants';\nimport throttle from 'lodash/throttle';\nimport { trackDonateLandingButtonClick } from '../../fpti/fpti';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { Message } from '@paypalcorp/worldready-react';\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 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 worldReady = useContext(WorldReadyContext);\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 const throttledFn = throttle(checkDeviceType, 200);\n window.addEventListener('resize', throttledFn);\n return () => {\n window.removeEventListener('resize', throttledFn);\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 = new MessageFormat(worldReady, {\n id: 'common.campaigns.campaignGoal.title',\n }).format({\n goalAmount: goalAmtWithCurrencySymbol,\n });\n\n const getCampaignMessage = (id, formatObj = undefined) =>\n new MessageFormat(worldReady, {\n id: `landing.campaigns.${id}`,\n }).format(formatObj);\n\n const advancedEndDateBadgeContent = {\n minute: getCampaignMessage('minute'),\n minutes: getCampaignMessage('minutes'),\n hour: getCampaignMessage('hour'),\n hours: getCampaignMessage('hours'),\n day: getCampaignMessage('day'),\n days: getCampaignMessage('days'),\n month: getCampaignMessage('month'),\n months: getCampaignMessage('months'),\n year: getCampaignMessage('year'),\n years: getCampaignMessage('years'),\n endsInContent: getCampaignMessage('endsInContent', {\n duration: '{duration}',\n unit: '{unit}',\n }),\n endedContent: getCampaignMessage('endedContent', { date: '{date}' }),\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>\n <Message id=\"landing.campaigns.contributions.error.title\" />\n </BodyText>\n <BodyText style={{ color: '#515354' }}>\n <Message id=\"landing.campaigns.contributions.error.body\" />\n </BodyText>\n <Button\n tertiary\n onClick={() => {\n setRetry(retry + 1);\n }}\n >\n <Message id=\"landing.campaigns.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 }\n\n return (\n <>\n {renderDonorWall()}\n {renderContributionsError()}\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: new MessageFormat(worldReady, {\n id: 'landing.social.subheader',\n }).format(),\n };\n\n const getSocialMessage = (id, params) => {\n return new MessageFormat(worldReady, {\n id: `landing.social.${id}`,\n }).format(params);\n };\n\n function buildSocialMessages() {\n return {\n social: {\n emailSubject: getSocialMessage('emailSubject', {\n donationName: '{donationName}',\n }),\n emailBody: getSocialMessage('emailBody', {\n donationName: '{donationName}',\n url: '{url}',\n }),\n mobileText: getSocialMessage('mobileText', {\n donationName: '{donationName}',\n }),\n facebookMessage: getSocialMessage('facebookMessage', {\n donationName: '{donationName}',\n url: '{url}',\n }),\n twitterMessage: getSocialMessage('twitterMessage', {\n donationName: '{donationName}',\n }),\n whatsappMessage: getSocialMessage('whatsappMessage', {\n donationName: '{donationName}',\n }),\n copyLinkHeader: getSocialMessage('copyLinkHeader'),\n copyLinkSubheaderBefore: getSocialMessage('copyLinkSubheaderBefore'),\n copyLinkSubheader: getSocialMessage('copyLinkSubheader'),\n copiedText: getSocialMessage('copiedText'),\n copyText: getSocialMessage('copyText'),\n subheader: getSocialMessage('subheader'),\n shareGeneric: getSocialMessage('shareGeneric'),\n },\n };\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 <Message id=\"landing.social.shareGeneric\" />\n </HeadingText>\n <ConfirmationSocialShare\n campaignId={templateData.productId}\n messages={buildSocialMessages()}\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 <Message id=\"landing.campaigns.readMore\" />\n </Button>\n </div>\n );\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 <div className=\"campaignDetails\" data-testid=\"campaignDetails\">\n <Card.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 </Card.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 <Message id=\"landing.campaigns.donateButton\" />\n </Button>\n </Col>\n <Sheet\n isOpen={isPaymentCardOpen}\n onClose={() => {}}\n title={new MessageFormat(worldReady, {\n id: 'landing.campaigns.donateButton',\n }).format()}\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 { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\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, worldReady) {\n let newErrorState = {};\n\n if (value) {\n newErrorState = {\n [fieldName]: this.validateInputValue(\n value,\n fieldName,\n fieldInvalid,\n worldReady\n ),\n };\n } else {\n newErrorState = {\n [fieldName]: new MessageFormat(worldReady, {\n id: `errors.service.${fieldRequired}`,\n }).format(),\n };\n }\n\n this.setState(newErrorState);\n }\n\n /*\n * Validate input\n */\n validateInputValue(value, fieldName, fieldInvalid, worldReady) {\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 new MessageFormat(worldReady, {\n id: `errors.service.${fieldInvalid}`,\n }).format();\n }\n }\n\n return '';\n }\n\n render() {\n const cscLabel = new MessageFormat(this.context, {\n id: 'guest.guestForm.label.csc',\n }).format();\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={new MessageFormat(this.context, {\n id: 'guest.guestForm.label.cscplaceholder',\n }).format()}\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 this.context\n )\n }\n cardSpec={this.state.cardSpec}\n helperText={new MessageFormat(this.context, {\n id: 'guest.guestForm.label.cscnote',\n }).format({\n csc: cscLabel.toLowerCase(),\n })}\n />\n </div>\n </div>\n );\n }\n}\n\nCVVComponent.contextType = WorldReadyContext;\n\nexport default CVVComponent;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { CDN_HOST_NAME } from '../../../utility/constants';\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react-text';\nimport { CreditCardIcon } from '@paypalcorp/pp-react-icons';\nimport _isEmpty from 'lodash/isEmpty';\nimport { Badge } from '@paypalcorp/pp-react-badge';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst PaymentInformation = ({\n source,\n paymentDigits,\n paymentType,\n issuer,\n isPaypalCurrencyConversion,\n funds,\n cardType,\n}) => {\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 <CreditCardIcon size=\"xl2\" />\n )}\n <div className=\"pay-info\">\n {issuer && <BodyText>{getIssuer()}</BodyText>}\n <CaptionText className=\"funding-info\">\n <Message\n id=\"guest.crossBorder.label.paymentInformation\"\n type={paymentType}\n number={paymentDigits}\n />\n </CaptionText>\n {!isPaypalCurrencyConversion && (\n <Badge type=\"success\">\n <Message id=\"guest.crossBorder.label.preferred\" />\n </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, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { CURRENCY_CONVERSION_OPTIONS } from '../../pages/guest/GuestReview';\nimport { Card } from '@paypalcorp/pp-react-card';\nimport { Sheet } from '@paypalcorp/pp-react-modal';\nimport { IconButton } from '@paypalcorp/pp-react';\nimport { BodyText, CaptionText, HeadingText } from '@paypalcorp/pp-react-text';\nimport { PaypalAppIcon, CreditCardIcon } from '@paypalcorp/pp-react-icons';\nimport { CheckmarkBackgroundIcon } from '@paypalcorp/pp-react-icons';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { checkKeyPressed } from '../../utility/accessibilityUtils';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nconst CurrencyConversionOption = (props) => {\n const getOptionIcon = (type) => {\n if (type === 'paypal-app') {\n return (\n <IconButton\n buttonType=\"secondary\"\n size=\"xl\"\n name={type}\n svgIconComponent={PaypalAppIcon}\n />\n );\n } else if (type === 'credit-cards') {\n return (\n <IconButton\n buttonType=\"secondary\"\n size=\"xl\"\n name={type}\n svgIconComponent={CreditCardIcon}\n />\n );\n }\n };\n\n return (\n <Card\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 <Card.Content>\n <div className=\"conversion-tile\">\n {getOptionIcon(props.type)}\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 <CheckmarkBackgroundIcon\n className={`icon-check ${!props.isSelected && 'hide-icon'}`}\n size=\"sm\"\n />\n </div>\n </Card.Content>\n </Card>\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 type: PropTypes.string,\n};\n\nconst CurrencyConversionModal = (props) => {\n const worldready = useContext(WorldReadyContext);\n const { selectedOption, exchangeRate } = props;\n let withPaypaltitle = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPaypal.title',\n }).format();\n let withPaypalRate = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPayPal.rate',\n }).format({\n amount: exchangeRate,\n });\n let withPaypalmessage = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPayPal.message',\n }).format();\n let withCardtitle = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withCard.title',\n }).format();\n let withCardmessage = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withCard.message',\n }).format();\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 <Message id=\"guest.crossBorder.label.modalTitle\" />\n </HeadingText>\n <BodyText className=\"text-center subTitle\">\n <Message id=\"guest.crossBorder.label.modalSubTitle\" />\n </BodyText>\n\n <CurrencyConversionOption\n isSelected={isPayPalSelected}\n title={withPaypaltitle}\n rate={withPaypalRate}\n description={withPaypalmessage}\n handleOptionSelection={() => setPaypalSelected(true)}\n className=\"option-paypal\"\n type=\"paypal-app\"\n />\n <CurrencyConversionOption\n isSelected={!isPayPalSelected}\n title={withCardtitle}\n description={withCardmessage}\n handleOptionSelection={() => setPaypalSelected(false)}\n className=\"option-card\"\n type=\"credit-cards\"\n />\n <div className=\"text-center\">\n <Button className=\"btn-sheet-wide\" onClick={handleNextButton}>\n <Message id=\"guest.crossBorder.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 { 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';\nimport { Message } from '@paypalcorp/worldready-react';\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=\"total-donation\">\n <BodyText strong>\n <Message id=\"guest.crossBorder.label.youllDonate\" />\n </BodyText>\n <BodyText strong>{funds}</BodyText>\n </div>\n )}\n\n <div className=\"change-conversion\">\n <BodyText>\n {isPaypalCurrencyConversion ? (\n <Message id=\"guest.crossBorder.label.withPaypal.title\" />\n ) : (\n <Message id=\"guest.crossBorder.label.withCard.title\" />\n )}\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 <Message id=\"guest.crossBorder.label.changeCurrencyButton\" />\n </Button>\n </div>\n {isPaypalCurrencyConversion && (\n <CaptionText>\n <Message id=\"guest.crossBorder.label.conversion\" amount={rate} />\n </CaptionText>\n )}\n\n {shouldShowCurrencyConversionOptions() && (\n <div className=\"conversion-message\">\n {isPaypalCurrencyConversion ? (\n <CaptionText>\n {AppStore.getUserCountry() === 'US' ? (\n <Message id=\"guest.crossBorder.label.spread\" />\n ) : (\n <Message id=\"guest.crossBorder.label.fee\" />\n )}\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, { useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport _includes from 'lodash/includes';\nimport {\n BodyText,\n IconButton,\n QuestionSmIcon,\n Sheet,\n Button,\n} from '@paypalcorp/pp-react';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst FeePricing = ({ feeAmounts, getLocalizedCurrency }) => {\n const worldReady = useContext(WorldReadyContext);\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=\"fee-donation\">\n <BodyText>\n <Message id=\"guest.reviewFees.donation\" />\n </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=\"fee-donation\">\n <BodyText className=\"pricing-fee\">\n <Message id=\"guest.reviewFees.fee\" />\n <IconButton\n className=\"tooltip-icon-button\"\n buttonType=\"tertiary\"\n svgIconComponent={QuestionSmIcon}\n size=\"sm\"\n onClick={() => setOpenHelperSheet(true)}\n >\n <Message id=\"guest.reviewFees.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=\"fee-donation\">\n <BodyText strong>\n <Message id=\"guest.reviewFees.total\" />\n </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={new MessageFormat(worldReady, {\n id: 'guest.reviewFees.helperTitle',\n }).format()}\n hideTitle={false}\n isOpen={openHelperSheet}\n onClose={() => setOpenHelperSheet(false)}\n >\n <BodyText className=\"helper-text-description\">\n <Message id=\"guest.reviewFees.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 <Message id=\"guest.reviewFees.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 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 { formatCurrencyAsString } 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 {\n Alert,\n Button,\n BodyText,\n CaptionText,\n Row,\n Col,\n} from '@paypalcorp/pp-react';\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';\nimport withWorldReady from '../../components/withWorldReady';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport MessageWithHTML from '../../components/MessageWithHtml';\n\nconst donateGiftPercentage = AppStore.getGiftAidItExtraAmount();\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 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: 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 worldReady = this.context;\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 let giftaidFlag = AppStore.getGiftaidItFlagStatus();\n\n const getRecurringLabel = () => {\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 { 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 {showCVVField && (\n <Row className=\"alert-container mb-8\">\n <Alert type=\"warning\">\n <Message\n id=\"guest.guestForm.label.cscwarning\"\n csc={new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.csc',\n })\n .format()\n .toLowerCase()}\n />\n </Alert>\n </Row>\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 giftaidInfo={{\n currency: this.state.outSymbol,\n amount: this.state.outAmount,\n orgName: this.state.subHeaderLabel,\n donateGiftPercentage: donateGiftPercentage,\n donationCode: AppStore.getDonationCode(),\n }}\n />\n )}\n <Row>\n <Col form=\"full\">\n <BodyText style={{ margin: '28px 0' }}>\n <Message id=\"guest.crossBorder.label.donatingFrom\" />\n </BodyText>\n </Col>\n </Row>\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 <MessageWithHTML\n id=\"guest.crossBorder.label.policies\"\n country={TemplateData.country}\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 ? (\n <Message\n id={`guest.guestForm.label.${getRecurringLabel()}`}\n amount={fundsOut}\n />\n ) : (\n <Message id=\"guest.guestForm.label.donatenow\" />\n )}\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\nGuestReview.contextType = WorldReadyContext;\n\nexport default withRouter(withWorldReady(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 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 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 <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 AppStore from '../../stores/AppStore';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData 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';\nimport MessageWithHTML from '../../components/MessageWithHtml';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nclass PaymentError extends React.Component {\n static contextType = WorldReadyContext;\n\n constructor() {\n super();\n this.state = {};\n }\n\n getErrorMessage = (id, params) => {\n return new MessageFormat(this.context, {\n id: `errors.paymentError.error.${id}`,\n }).format(params);\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_CODE = AppStore.getPaymentError() || '';\n\n let WENT_WRONG = '',\n TEMP_GLITCH = '',\n tryagain = '';\n\n const hideButton = ERROR_CODE === 'WSM_PAYER_LIMIT_EXCEEDED';\n\n switch (ERROR_CODE) {\n case 'WSM_PAYMENT_DENIED':\n WENT_WRONG = <Message id=\"errors.paymentError.error.DID_NOT_WORK\" />;\n TEMP_GLITCH = (\n <Message id=\"errors.paymentError.error.DIFF_CREDIT_DEBIT\" />\n );\n tryagain = <Message id=\"errors.paymentError.label.trydiffcard\" />;\n break;\n case 'WSM_CANNOT_PAY_SELF':\n WENT_WRONG = (\n <Message id=\"errors.paymentError.error.WSM_CANNOT_PAY_SELF_H\" />\n );\n TEMP_GLITCH = this.getErrorMessage('WSM_CANNOT_PAY_SELF', {\n ['data.htmlTagsProps.name']: templateData.donationName,\n }).replace('{data.htmlTagsProps.name}', templateData.donationName);\n break;\n case 'WSM_PAYER_LIMIT_EXCEEDED':\n WENT_WRONG = (\n <Message id=\"errors.paymentError.error.AmountLimitBreachError\" />\n );\n TEMP_GLITCH = (\n <MessageWithHTML\n id=\"errors.paymentError.error.CustomerCareMessage\"\n customerServiceLink={'/selfhelp/home'}\n />\n );\n break;\n default:\n break;\n }\n\n return (\n <div>\n <FullPageError\n title={\n WENT_WRONG ||\n 'We’re sorry that we are experiencing temporary difficulties.'\n }\n body={\n TEMP_GLITCH ||\n 'Please try again later. We apologize for the inconvenience.'\n }\n buttonLabel={hideButton ? null : tryagain || 'Return to PayPal'}\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 { hideSpinnerOverlay } from '../../utility/helper';\nimport Illustration from '../../components/illustrations/Illustration';\nimport ConfirmationBody from '../../confirmation/ConfirmationBody';\nimport { isMobileOrInContext } from '../../utility/inContextDonation';\nimport { trackErrorPageIM } from '../../fpti/fpti';\nimport { PAGE_SPEC } from '../../fpti/fptiConstants';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\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 const noAccountErrorMessage = new MessageFormat(this.context, {\n id: 'errors.paymentError.noAccountError',\n }).format();\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\n message={\n noAccountErrorMessage === 'errors.paymentError.noAccountError'\n ? \"We can't complete this donation. The receiver doesn't have a valid PayPal account.\"\n : noAccountErrorMessage\n }\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\nUnilateralError.contextType = WorldReadyContext;\nexport default withRouter(withTheme(UnilateralError));\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData 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';\nimport { Message } from '@paypalcorp/worldready-react';\nimport withWorldReady from '../../components/withWorldReady';\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 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\n message={<Message id=\"errors.threeDSError.errorMessage\" />}\n />\n </Col>\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationBody\n message={<Message id=\"errors.threeDSError.tryAgain\" />}\n />\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 <Message id=\"errors.threeDSError.tryCard\" />\n </Button>\n </Col>\n </Row>\n </div>\n </div>\n );\n }\n}\n\nexport default withWorldReady(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';\nimport withWorldReady from './withWorldReady';\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 withWorldReady(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';\nimport withWorldReady from '../components/withWorldReady';\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\nconst MainRouter = () => (\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);\n\nconst RouterWithWorldReady = withWorldReady(MainRouter);\n\nReactDOM.render(\n <RouterWithWorldReady />,\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"],"sourceRoot":""}