{"version":3,"sources":["webpack:///./buttons/componentsV3/preview/ButtonFactoryPreviewPPLogoHeader.js","webpack:///./buttons/componentsV3/preview/ButtonFactoryV3DesktopPreview.js","webpack:///./buttons/componentsV3/illustrations/Illustration.js","webpack:///./buttons/componentsV3/fields/BasicInputField.js","webpack:///./actions/AppActions.js","webpack:///./utility/polyfillFetch.js","webpack:///./utility/domUtils.js","webpack:///./buttons/utils/serverProps.js","webpack:///./utility/geoUtils.js","webpack:///./utility/paypalAphrodite.js","webpack:///./utility/helper.js","webpack:///./buttons/componentsV3/partner/utils/voucherConstants.js","webpack:///./buttons/utils/headerUtils.js","webpack:///./buttons/componentsV3/modals/CountryNotSupportedTile.js","webpack:///./buttons/utils/buttonImage.js","webpack:///./buttons/componentsV3/DonateButtonFeedback.js","webpack:///./buttons/lib/buttonModelV3.js","webpack:///./buttons/componentsV3/partner/utils/partnerUtils.js","webpack:///./buttons/utils/authUtils.js","webpack:///./buttons/utils/constants.js","webpack:///./buttons/utils/commonUtils.js","webpack:///./buttons/componentsV3/buttonManager/buttonOverview/components/recurringCheckbox.js","webpack:///./routes/publicPath.js","webpack:///./utility/inContextDonation.js","webpack:///./utility/queryStringHelper.js","webpack:///./utility/getTemplateData.js","webpack:///./vendor/verbose-logger/index.js","webpack:///./vendor/analytics/index.js","webpack:///./buttons/lib/extraVariables.js","webpack:///./buttons/utilsV3/badgeUtils.js","webpack:///./buttons/componentsV3/preview/DonateButtonPreview.js","webpack:///./buttons/componentsV3/preview/ImageButtonPreview.js","webpack:///./buttons/componentsV3/preview/ButtonPreviewContainer.js","webpack:///./buttons/componentsV3/preview/SkeletonScreen.js","webpack:///./buttons/componentsV3/preview/ButtonFactoryV3SdkPreview.js","webpack:///./components/coverFee/feeUtils.js","webpack:///./utility/accessibilityUtils.js","webpack:///./buttons/utils/clientValidatorUtils.js","webpack:///./buttons/lib/buttonModel.js","webpack:///./buttons/utils/buttonFactoryUtils.js","webpack:///./buttons/clientConstants.js","webpack:///./buttons/actions/actionsButtonFactory.js","webpack:///./buttons/reducers/reducerButtonFactory.js","webpack:///./buttons/utils/spinnerUtils.js","webpack:///./buttons/utils/localesMessages.js","webpack:////donatenodeweb-ci-2793/workspace/donate-gro-release/node_modules/@paypalcorp/instance-location/geo sync ^\\.\\/.*$","webpack:///./buttons/componentsV3/switchPanels/SwitchPanel.js","webpack:///./buttons/componentsV3/buttonManager/buttonOverview/components/singleAmount.js","webpack:///./buttons/componentsV3/CountdownTimer.js","webpack:///./buttons/utils/localeUtils.js","webpack:///./buttons/componentsV3/ExtendSession.js","webpack:///./fpti/helper.js","webpack:///./fpti/analytics.js","webpack:///./fpti/fpti.js","webpack:///./buttons/utilsV3/analytics.js","webpack:///./utility/formator.js","webpack:///./components/coverFee/coverFeeCheckbox.js","webpack:///./components/programs/Programs.js","webpack:///./buttons/componentsV3/buttonManager/buttonOverview/components/PresetAmountPreviewComponent.js","webpack:///./components/NoteFieldError.js","webpack:///./components/note.js","webpack:///./buttons/componentsV3/preview/DonorPaymentInfoSkeleton.js","webpack:///./buttons/componentsV3/preview/VoucherPreviewComponent.js","webpack:///./buttons/componentsV3/withTheme.js","webpack:///./buttons/componentsV3/ppcc.js","webpack:///./buttons/componentsV3/preview/CommonPreviewComponent.js","webpack:////donatenodeweb-ci-2793/workspace/donate-gro-release/lib/geoUtils.js","webpack:///./buttons/lib/clientValidatorV3.js","webpack:///./stores/AppStore.js","webpack:///./buttons/reducers/reducerButtonFactoryV3.js","webpack:///./utility/personalizedMessages.js","webpack:///./buttons/componentsV3/buttonManager/actionsManager.js","webpack:///./buttons/components/partner/utils/voucherConstants.js","webpack:///./buttons/components/partner/utils/partnerUtils.js","webpack:///./buttons/reducers/reducerApplication.js","webpack:///./buttons/components/partner/actionsPartner.js","webpack:///./buttons/components/partner/helpers.js","webpack:///./buttons/components/partner/reducerPartner.js","webpack:///./buttons/componentsV3/buttonManager/reducerManager.js","webpack:///./buttons/reducers/index.js","webpack:///./dispatcher/AppDispatcher.js","webpack:///./buttons/componentsV3/modals/BasicModal.js","webpack:///./buttons/utils/amountUtils.js","webpack:///./fpti/fptiConstants.js","webpack:///./buttons/utils/modalUtils.js","webpack:///./routes/configureHistory.js","webpack:///./pages/spinner/Spinner.js","webpack:///./utility/lazyLoader.js","webpack:///./pages/common/FallbackSpinner.js","webpack:///./buttons/componentsV3/fields/BasicRadioField.js","webpack:///./buttons/componentsV3/fields/BasicSelectField.js","webpack:///./buttons/componentsV3/fields/CheckboxField.js","webpack:///./components/common/DropZone.js","webpack:///./buttons/componentsV3/WizardStepsV3/ButtonStyles/ButtonStyles.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/StepHeader.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/OrganizationName.js","webpack:///./buttons/componentsV3/fields/TextAreaWithByteCounter.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/Purpose.js","webpack:///./buttons/componentsV3/logoExperience/DropzoneLogo.js","webpack:///./buttons/componentsV3/logoExperience/LogoModal.js","webpack:///./buttons/componentsV3/logoExperience/LogoExperience.js","webpack:///./buttons/componentsV3/BannerImage/CropImage.js","webpack:///./buttons/componentsV3/BannerImage/DropzoneImageHandle.js","webpack:///./buttons/componentsV3/BannerImage/ImageModal.js","webpack:///./buttons/componentsV3/BannerImage/BannerImage.js","webpack:///./buttons/componentsV3/navigationButtons/WizardNavButtons.js","webpack:///./buttons/componentsV3/WizardStepsV3/WizardStep1.js","webpack:///./buttons/componentsV3/WizardStepsV3/Currency.js","webpack:///./buttons/componentsV3/WizardStepsV3/AmountType.js","webpack:///./buttons/componentsV3/WizardStepsV3/AmountSetup.js","webpack:///./buttons/componentsV3/switchPanels/CoverFeesSwitch.js","webpack:///./buttons/componentsV3/switchPanels/RecurringSwitch.js","webpack:///./buttons/componentsV3/FullPageVsPopup.js","webpack:///./buttons/componentsV3/WizardStepsV3/WizardStep2.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/MailingAddressSwitch.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/Note.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/AdvancedUrls.js","webpack:///./buttons/componentsV3/fields/ExtraVariablesTextArea.js","webpack:///./buttons/componentsV3/WizardStepsV3/components/AdvancedVariables.js","webpack:///./buttons/componentsV3/WizardStepsV3/WizardStep3.js","webpack:///./buttons/componentsV3/WizardStepsV3/WizardStep4.js","webpack:///./buttons/componentsV3/login/components/ValuePropCard.js","webpack:///./buttons/componentsV3/login/components/ValueProp.js","webpack:///./buttons/componentsV3/login/components/Login.js","webpack:///./buttons/componentsV3/login/components/Faq.js","webpack:///./buttons/componentsV3/login/ButtonFactoryLogin.js","webpack:///./buttons/componentsV3/preview/ButtonFactoryV3MobilePreview.js","webpack:///./buttons/componentsV3/preview/PreviewNavigator.js","webpack:///./buttons/utils/ButtonFactoryFPT.js","webpack:///./buttons/componentsV3/preview/WizardStep1Preview.js","webpack:///./buttons/componentsV3/preview/WizardMobilePreview.js","webpack:///./buttons/componentsV3/ButtonFactoryWizardV3.js","webpack:///./pages/buttonFactory.js","webpack:///./buttons/utilsV3/fptiConstants.js","webpack:///./buttons/store/configureStore.js","webpack:///./buttons/componentsV3/programs/ProgramFieldV3.js","webpack:///./buttons/componentsV3/programs/AddRemoveProgramsV3.js","webpack:///./buttons/componentsV3/programs/ProgramsV3.js","webpack:///./utility/constants.js","webpack:///./utility/externalIntegrationUtils.js"],"names":["ButtonFactoryPreviewPPLogoHeader","className","aria-hidden","src","data-testid","messages","getLocaleMessages","ButtonFactoryV3DesktopPreview","isButtonOverviewPreview","showPPHeader","id","role","aria-label","navigator","fullPage","desktopAccessibility","CommonPreviewComponent","propTypes","PropTypes","bool","illustrations","critical","appendCdnHostName","success","warning","activity","STYLES","StyleSheet","create","large","width","small","Illustration","type","size","ariaHidden","rest","classes","classNames","css","string","BasicInputField","this","props","input","label","meta","touched","error","active","validateOnBlur","readOnly","helpText","customError","showError","validateOnChange","errorMsg","hasError","trackEventWithData","FPTI_SPEC","FIELD_LEVEL_ERROR_IM","error_code","error_desc","error_detail","name","errorText","helperText","Component","object","oneOfType","array","changeAmount","item","AppDispatcher","handleViewAction","actionType","AppConstants","changeSymbol","changeCode","changeFormatedAmount","changeCoverFee","changeAnonymousStatus","changeFeeAmount","changeFormatedFeeAmount","changeNote","updateDonationAmountType","donationAmountType","updateSelectedProgram","updateSelectedPresetButtonId","polyfillFetch","url","options","fetchPolyfill","show","selector","display","elementsToShow","document","querySelectorAll","i","length","style","hide","elementsToHide","addClass","elementsSelected","classList","add","removeClass","remove","fetcher","csrf","querySelector","dataset","fireEvent","headers","window","fetch","location","href","indexOf","then","response","handleErrors","status","returnPath","renderURL","pathname","replace","history","pushState","reload","eventName","event","createEvent","initEvent","dispatchEvent","getElement","selectorOrElement","obj","HTMLElement","e","nodeType","ownerDocument","isElement","_noOpFunction","safeScrollElement","scrollTo","element","safeScrollWindow","scrollElementTo","scrollY","scrollTop","top","behavior","pageYOffset","serverProps","getServerProps","serverPropsNode","getElementById","serverPropsJSON","innerHTML","JSON","parse","templateData","cdnHostName","shouldRTL","PayPalStyleSheet","cssInJSObject","rtlConvertInline","rtlConvert","contextLocalityDir","showSpinnerOverlay","waitTextEl","focus","outline","onkeydown","outlineOffset","keyCode","activeElement","preventDefault","getPPCCStatus","merchantPpccStatus","toUpperCase","VOUCHER_TYPE_CUSTOM","VOUCHER_TYPE_PERCENTAGE","VOUCHER_TYPE_DOLLAR","VOUCHER_MAX_CHAR_LENGTH","MESSAGE_TO_DONORS_MAX_BYTE_LENGTH","VOUCHER_MAX_FILE_SIZE","ALLOWED_FILE_EXTENSIONS","ALLOWED_FILE_TYPES","MESSAGE_INTERPOLATION_KEY","VOUCHER_INPUT_FIXED","VOUCHER_INPUT_PERCENTAGE","VOUCHER_INPUT_CUSTOM","DEFAULT_LOGO_URL","DISPLAY_DEFAULT_MERCHANT_NAME","INVALID_ADDRESS_ERROR","setContainerMargins","merchantHeader","reactButtonsContainer","reactButtonsContainerMarginTop","offsetHeight","isLoggedInUser","innerWidth","includes","getReactButtonsContainerMarginTopExtension","margin","setContainerMarginsBefore","addEventListener","countryNotSupported","header","msg","button","CountryNotSupportedTile","onClick","userType","getUserType","getDonateButtonImageUrl","buttonSize","showAcceptedCardLogos","languageCode","countryCode","reduxStore","getStore","countryAndLanguageDetails","_get","getState","cc","buttonFeedback","DonateButtonFeedback","currentStep","fptiSpec","PAYPAL","analytics","step","reloadQualtrics","number","ACCOUNT_IDENTIFIER_TYPES","SERVER_BUTTON","AMOUNT_OPTIONS","AMOUNT_TYPE","AMOUNT","BN","BTN_CODE_TYPE","BUSINESS","BUTTON_IMAGE_URL","BUTTON_IMAGE","BUTTON_NAME","BUTTON_VARIABLES","CANCEL_RETURN","CN","CODE","COUNTRY_CODE","COVER_FEES_OPTION","CURRENCY_CODE","DONATE_CONTEXT","EMAIL_CODE","FLOW_TYPE","ID","IMAGE_BANNER","ITEM_NAME","ITEM_NUMBER","LANGUAGE","LC","LOGO_TARGET","LOGO_URL","NO_NOTE","NO_RECURRING","NO_SHIPPING","PROGRAMNAMES","RECURRING_OPTION","RETURN","SUBTYPE","TYPE","VERSION","WEBSITE_CODE","CLIENT_BUTTON","ACCOUNT_IDENTIFIER_TYPE","BTN_SIZE","BUSINESS_PROFILE_LOGO_URL","LISTPROGRAMS","MERCHANT_AMOUNT_1","MERCHANT_AMOUNT_2","MERCHANT_AMOUNT_3","NO_ADVANCED_VARIABLES","NO_BANNER_IMAGE","NO_CANCEL_RETURN","NOTE_LABEL","ORGANIZATION_NAME","PROGRAMINPUT","PURPOSE","RECEIVER_CURRENCY","NO_LOGO_URL","PAYMENT_SETTINGS_LOGO_URL","SHOW_ACCEPTED_CARD_LOGOS","USE_PAYPAL_BUTTON_STYLE","getButtonVariable","property","buttonVar","_find","button_variables","buttonVariable","addButtonVariable","clientFormat","clientKey","serverFormat","serverKey","undefined","push","value","buttonSizeMap","sm","md","lg","shouldUsePayPalButtonStyle","buttonImageUrl","button_image_url","getAccountIdentifierValue","isServerToClient","isLoggedIn","authState","accountIdentifier","checkIfOldButton","_isEmpty","transformServerFormatToClient","noShipping","noNote","useFullPageExperience","bannerImageUrl","isEmpty","test","exec","toLowerCase","getButtonSize","logoFieldValues","serverFormatButton","businessProfileLogoUrl","businessImageUrls","paymentSettingsLogoUrl","logoUrl","logoTarget","version","noLogoImage","LOGO_TARGET_PROFILE","merchantExperienceUrls","LOGO_TARGET_BUTTON","LOGO_TARGET_NOLOGO","getLogoUrlFieldValues","supportedVariables","getSupportedVariables","extraVariablesView","formatVariablesForTextArea","noAdvancedVariables","unsupportedVariables","getUnsupportedVariables","amount","currency","formatAmountFromServer","coverFees","recurringOption","isOldButton","noRecurring","getRecurringOption","amountType","programNames","v0Program","transformClientFormatToServer","isHosted","_includes","isMerchantIdEnabled","isProgramEnabled","enableProgram","isMerchantPresetAmountEnabled","enableMerchantPresetAmount","isRecurringEnabled","enableRecurring","language","noCancelReturn","noLogo","accountIdentifierValue","normalizeNumber","locale","country","buttonImage","usePaypalButtonStyle","buttonImageProps","button_image","noBannerImage","extraVariables","parseTextAreaValue","_each","variable","mapServerFieldToClientField","server_field","field","_findKey","isGmbFlow","bn","isGenericFlow","isInputTextValid","inputToTest","match","voucherTypeToInputTypeMapping","voucherType","voucherInputType","getVoucherDetail","get","voucherDetails","description","discountTagline","sub_title","find","vType","voucherValue","applicationState","AUTH_STATE_LOGGEDIN","BUTTON_DELETED","BUTTON_MANAGER","BUTTON_OVERVIEW","DELETE_DONATE_LINK","DELETE_DONATE_LINK_ALERT","DELETE_DONATE_LINK_ERROR","ENTRY_POINT_HAWK","ENTRY_POINT_DIRECT","MANAGE_BUTTON_LINK","MANAGE_PAGE_LOGIN","MANAGE_VOUCHER_LINK","OVERVIEW_PAGE_LOGIN_TILE","UNAUTHORIZED","INVALID_BUTTON","AMOUNT_TYPE_FIXED","AMOUNT_TYPE_VARIABLE","AMOUNT_TYPE_PRESET","setTitleCase","str","txt","charAt","substr","isMobile","serverPropsData","err","console","warn","truncatesAtChar","charNum","trunStr","substring","trim","concat","getImageSize","fileSize","MEGABYTE","KILOBYTE","megabyte","kilobyte","formatNumberDecimals","rp","recurring_label","RecurringCheckbox","disabled","webpackPublicPath","__webpack_public_path__","isInContext","isPopupMode","isSdkMode","Boolean","sdkMeta","targetMeta","opener","isFullPageRedirectionMode","xprops","getParameterByName","results","RegExp","decodeURIComponent","rawTemplateData","giftAid","_set","webscrData","giftAidAddress","localsMessagesNode","content","locals","personalized","getPersonalizedMessagesAsContentLoaderStandard","init","charityName","er","donationId","donorCoversFee","feePayer","donationAmount","rawAmount","toString","AppActions","formatCurrency","donationCode","coverFee","feeAmount","formatedFeeAmount","formatAmount","feeCurr","anonymousEnabled","anonymousStatus","symbol","donationSymbol","code","note","donationNote","selectedPresetButtonId","enablePresetAmounts","presetAmounts","donateContext","amount_type","amount_options","map","Number","localsMessages","templateName","localsAllMessages","parseMessages","log","neff","isEnabled","noop","s","t","tl","emptyAnalytics","recordClick","recordImpression","Analytics","trackLinkWithData","linkName","pageGroup","pageName","data","trackType","fpti","Object","assign","trackLink","keys","forEach","key","trackPageWithData","logger","page","prop25","eVar25","pgrp","tmpl","erpg","message","prop14","erfd","fieldId","prop15","eccd","prop29","screen","tsrce","fireBeacon","exception","offer_type","trackErrorWithData","transactionDetailsLinks","link","prop26","pglk","prop27","pgln","prop28","prop","isLink","arguments","startClientErrorTracking","donateButtonVariables","allSupportedButtonVariables","getNames","buttonVariables","_map","getButtonVariables","names","isSupportedVariable","getExtraVariables","buttonVariableNames","_difference","extraVariableNames","unsupportedVariableNames","supportedVariableNames","_intersection","join","textAreaValue","variables","split","slice","_last","_head","shouldShowBadge","showBadge","newFeatureBadge","getContent","browser","DonateButtonPreview","donateButtonUrl","getDonateButtonUrl","alt","buttonLocaleUrls","previewContainerText","ImageButtonPreview","onError","func","ButtonPreviewContainer","SkeletonScreen","isGuestPagePreview","ButtonFactoryV3SdkPreview","popUp","popUpAccessibility","isSDKPreview","isOptInCoverFee","AppStore","getCoverFeeOptInStatus","isAtLandingPage","checkKeyPressed","doFunction","which","KEY_DOWN","SPACE","ENTER","isValidSecureUrl","isValidUrl","validateExtraVariables","byteLength","byteCount","charCodeAt","SETTINGS_LOGO_URL","SHOW_ACCOUNT_LOGO_OPTIONS","reduxState","shouldShowAcceptedCardLogos","merchantExperienceUrl","businessImageUrl","settingsLogoUrl","showAccountLogoOptions","getServerValueForLogoUrl","WIZARD_TOTAL_STEPS","isHostedFlow","getNextStep","flowType","getWizardTotalSteps","getPreviousStep","getPageUrl","pageNumber","currentPath","isUnhostedFlow","getOptionsForLanguageField","selectedCountry","allLanguages","countriesByCode","languages","languageCodes","_keys","displayValue","getOptionsForCountriesField","countryCodes","getFlowType","state","isDonateButton","isDonateLink","getStepUrl","currentLocation","targetStep","search","isTablet","getEncryptedAccountNum","encrypted_account_number","getSavedButtonsCount","listButtons","isGuestFormPreview","handleLoginHelper","showSpinner","handleSignupHelper","hostname","BTN_FACTORY_V3_FORM","BTN_FACTORY_MAX_PROGRAMS","MAX_MOBILE_WIDTH","BUTTON_FACTORY_BUSY","INITIALIZE_WIZARD","WIZARD_CONTINUE","WIZARD_BACK","WIZARD_SET_CURRENT_PAGE","GET_BUTTON_DATA_SUCCESS","GET_BUTTON_DATA_ERROR","CREATE_BUTTON_SUCCESS","CREATE_BUTTON_ERROR","EDIT_BUTTON_SUCCESS","EDIT_BUTTON_ERROR","UPDATE_CODE_SNIPPET","SHOW_LOGIN_MODAL","HIDE_LOGIN_MODAL","SHOW_ACTIONABLE_ERROR_MODAL","HIDE_ACTIONABLE_ERROR_MODAL","SHOW_UNACTIONABLE_ERROR_MODAL","HIDE_UNACTIONABLE_ERROR_MODAL","SHOW_LEAVE_MODAL","HIDE_LEAVE_MODAL","SET_ERROR_LOADING_IMAGE","RESET_ERROR_LOADING_IMAGE","OPEN_MOBILE_PREVIEW","CLOSE_MOBILE_PREVIEW","UPDATE_IS_MOBILE","UPDATE_FLOW_SPEC","UPDATE_BUSINESS_IMAGE_URLS","transformClientFormatToServerV3","goToNextStep","goToPreviousStep","setCurrentStep","stepNumber","payload","initializeWizard","busy","getButton","buttonId","dispatch","json","catch","saveButton","buttonData","updateButton","createButton","buttonDataServerFormat","resParams","method","body","stringify","statusText","ok","responseJson","responseJSON","updateCodeSnippet","showLoginModal","hideLoginModal","showActionableErrorModal","hideActionableErroModal","showUnactionableErrorModal","hideUnactionableErrorModal","showLeaveModal","hideLeaveModal","destroyForm","destroy","setErrorLoadingLogoImage","resetErrorLoadingLogoImage","openMobilePreview","closeMobilePreview","updateIsMobile","updateFlowSpec","flowSpec","uploadImage","imageUrl","updateBusinessProfileLogo","updateBusinessImageUrls","defaultButton","accountIdentifierType","allowPrograms","amountValue","business","email","coverFeesEnabled","itemNumber","listPrograms","merchantAmount1","merchantAmount2","merchantAmount3","organizationName","purpose","receiverCurrency","primaryCurrency","recurringEnabled","uploadNewLogo","hideSpinner","allLocaleMessages","propertyName","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","resolve","module","exports","toggle","renderSwitchComponent","reversed","SwitchPanel","isChecked","title","subTitle","noDivider","badgeContent","inline","secondaryLabel","onLabel","yes","offLabel","no","checked","onChange","labelIcon","SingleAmount","currencyCode","useState","DEFAULT_INPUT_FONTSIZE","inputFontSize","setInputFontSize","amountWidth","setAmountWidth","currencyParts","getCurrencyParts","formatAmountToOnlyNumbers","isSymbolDisplayedRightSide","currencyAmount","getCurrencyPartByType","currencySymbol","amountClassLabel","measuredRef","useCallback","node","inputWidth","getInputWidth","MIN_INPUT_WIDTH","getFontSize","fontSize","ref","strong","getRemainingTime","millis","remainingTime","Date","setMilliseconds","toLocaleTimeString","minute","second","CountdownTimer","milliseconds","timeLeft","setTimeLeft","useEffect","pause","intervalId","setInterval","clearInterval","onTimeout","styles","dialogHeader","dialogMessage","continueButton","ExtendSession","sessionTimeout","confirmTime","expireTime","useHistory","isOpen","setIsOpen","isTimeout","setIsTimeout","isSending","setIsSending","extendSessionCalledAt","setExtendSessionCalledAt","logoutUserAndForceLogin","current_location","returnUri","finally","setTimeout","fetchCallListener","clearTimeout","removeEventListener","requestExtendSession","a","ALERT_MODAL_CONFIRM_CL","action","ACTION","EXTEND_SESSION","now","getTime","impression","ALERT_MODAL_IM","BasicModal","buttonLabel","buttonState","buttonOnClick","closeOnBackgroundClick","iconType","message1","onClose","color","coverFeeEnabled","fptPageName","donationName","donorIpCountry","onboardingEnabled","npid","getDonationAmount","product","productId","token","integrationIdentifier","FPTI_TAGS","getDefaultPageSpec","isOnboardingFlow","pageSpec","PAGE_SPEC","ONBOARDING_GUEST_SUCCESS_PAGE","GUEST_SUCCESS_PAGE","ONBOARDING_GUEST_PENDING_PAGE","GUEST_PENDING_PAGE","LANDING_PAGE","ONBOARDING_GUEST_FORM","GUEST_FORM","instance","trackPageLoad","globalData","onceData","fromSetup","trackClick","donationAmountEditable","trackErrorIM","errorCode","errorMessage","fieldName","additionalData","recordError","trackError","isExternalFlow","EVENT_NAME","DW_GIVING_FAILED_CUSTOMER_INTERACTION_OCCURRED","SCREEN_NAME","DW_GIVING_DONATE_SETUP_SCREEN","DW_GIVING_DONATE_GUEST_FORM_SCREEN","ERR_FIELD","ERR_CODE","ECCD","ERPG","ERR_DESC","trackPageIM","trackLinkClick","LINK","PAGE_LINK","PAGE_GROUP_LINK","spec","fptiData","recordEvent","event_name","trackEventWithGlobalData","griffin","metadata","__getInitialData","clientMetadata","initGriffinPhone","initGriffin","getGriffin","initialDataNode","initialDataJSON","_getAmountValue","params","getInitialData","CURRENCY_FORMAT","parts","formatCurrencyNoDecimals","NUMBER_FORMAT","maximumFractionDigits","formatNumber","formatCurrencyAsString","format","prototype","hasOwnProperty","call","formatInputAmount","formatCurrencyWithSymbol","CoverFeeCheckbox","handleCoverFeeChange","optInStatus","isDisabled","useHTML","target","checkboxStatus","Programs","selectedIdx","handleSelect","getProgramOptions","programName","primaryText","programOption","findIndex","program","appStore","getSelectedProgram","programs","optional","selectedItemIndex","onSelection","index","selectedProgram","LINK_NAME","PROGRAM_SELECTED","CAMPAIGN","isRTL","PresetAmountPreviewComponent","amountOptions","otherAmountLabel","presetAmountOptions","formattedAmount","displayCurrency","noDecimals","otherAmountOption","presetOptions","isMobilePreview","isPreview","NoteFieldError","NoteComponent","lengthLimit","providedLabel","charityNoteEnabled","charityNoteLabel","getDonationNote","setDonationNote","initialNoteLabel","showLabel","setShowLabel","setShowError","noteLabel","setNoteLabel","textAreaEl","useRef","isNoteTextPresent","current","isNotePreview","directionality","htmlFor","NOTE_PAD","DW_GIVING_DONATE_SETUP_COMMENT_PRESSED","iconName","marginLeft","buttonType","maxRows","minRows","showCharacterCounter","maxLength","maxCharacters","onBlur","dir","paymentInfo","preview","DonorPaymentInfoSkeleton","theme","phoneComponent","voucher","VoucherPreviewComponent","offerProgram","receiverName","voucherMessageHeader","voucherHeading","as","dangerouslySetInnerHTML","__html","heading","withTheme","WrappedComponent","baseLayerContainer","position","centeringContainer","left","PPCC","verifiedIcon","phonePreview","cancelAndReturn","donateTo","donateWithPayPal","donateWithCard","otherAmount","initialNote","previewMessage","logoPreviewMessage","donateNow","mailingAddressLabel","mailingAddressPrimaryText","mailingAddressHelperText","poweredBy","paypalBranding","termsContent","currentUrl","isManageRoute","formattedButton","formValues","buttonDetails","cancelReturn","isVoucherFlow","iconUrl","isPresetAmount","displayGuestFormPreview","displayAddressCheckbox","displayNote","showCancelOrReturn","displayBanner","displayDivider","amountCurrency","backgroundImage","MERCHANT_PPCC_CONFIRMED_STATUS","tabIndex","branded","iconComponent","secondary","getCdnHostName","height","showVoucherFlow","connect","getFormValues","buttonFactoryV3","buttonManagerV3","required","atleastOne","duplicatedProgram","genericSizeError","MAX_BUTTON_NAME_LENGTH","invalidProgramSizeError","invalidPurposeSizeError","invalidNameSizeError","invalidNoteSizeError","validate","values","errors","invalid","currencyParams","minimumDonationError","minimumDonationUS","isUSD","parseFloat","insecure","generic","return","extraVariablesError","buttonName","programErrors","validateDuplication","programInput0","validatePrograms","_merge","duplicated","_alldata","DonationStore","EventEmitter","emitChange","emit","getAllData","getDonationSymbol","getDonationCode","getFormatedAmount","formatedAmount","getDonationRecurring","recurring","getRecurringModalStatus","recurringModalStatus","getAnonymousStatus","getFeeAmount","getFormatedFeeAmount","getAmountBeforeFee","amountBeforeFee","getConfirmation","confirmation","getPostBackData","postBackData","getCurrentPage","currentPage","getServerErros","serverErrors","getPaymentError","paymentError","getSignUpError","signUpError","getFundingOptions","fundingOptions","getEmail","getBillingAddress","billingAddress","getUserCountry","getDonationAmountType","getGiftaidItFlagStatus","giftAidItFlag","getShareAddress","shareAddress","getAddCardError","addCardError","getGiftAidItExtraAmount","DonationConstants","getSelectedPresetButtonId","getCardSpec","cardSpec","getFormData","formData","getThreeDSContingency","threeDSContingency","getLanguageSelectorState","languageSelectorState","getOrderStatus","orderStatus","dispatcherIndex","register","defaultState","totalSteps","isMobilePreviewOpen","getFormattedButton","initialState","clientSideState","isButtonCreated","newState","customVariable","errorLoadingLogoImage","cache","getTouchpoint","touchpointCode","personalizedMessages","touchpoint","touchpoint_code","getPersonalizedMessages","merge","isHtml","includeImpressionUrl","sort","contentKey","trackingDetails","impressionUrl","tracking_details","impression_url","result","CREATE_DEFAULT_BUTTON","CREATE_DEFAULT_BUTTON_SUCCESS","CREATE_DEFAULT_BUTTON_ERROR","DELETE_BUTTON","DELETE_BUTTON_SUCCESS","DELETE_BUTTON_ERROR","GET_BUTTON","GET_BUTTON_SUCCESS","GET_BUTTON_ERROR","UPDATE_VOUCHER_LISTING_STATUS","UPDATE_VOUCHER_LISTING_STATUS_SUCCESS","UPDATE_VOUCHER_LISTING_STATUS_ERROR","deleteButton","offerProgramId","fetchURL","updateVoucherListingStatus","isToList","voucherVariant","ALL_VOUCHER_TYPE_INFO","receivableCurrency","application","isEmailConfirmed","unknownError","getHost","host","protocol","inputField","placeholder","isGMBVoucherTestGroup","bnCode","addVoucher","selectedVoucherType","allVoucherTypeInfo","voucherInfo","voucherContent","partnerButtons","offerProgramCode","shortUrl","confirmEmailSent","emailSendError","verifyEmailModalOpen","checkIfEmailConfirmedError","typeToUpdate","voucherInfoIndexToUpdate","updatedVoucherInfo","tagline","details","splice","zipcode","isOnAgreement","merchantFooter","customReducer","form","reduxFormReducer","Dispatcher","source","children","linkLabel","linkOnClick","message2","containerClassName","btnState","any","currencyMetadata","parseInt","digits","negativeDigits","hasDecimalSeparator","CURRENCY_FORMAT_SYMBOLISOCURRENCY","currencyPart","__getCurrencyMetadata","__initializeGriffin","DIGITS_TO_FONT_SIZE_MAPPING","8","9","10","digitCount","text","fontWeight","getComputedStyle","spanElem","createElement","fontFamily","appendChild","getBoundingClientRect","removeChild","GUEST_SIGNUP_SUCCESS_PAGE","GUEST_FAILURE_PAGE","MEMBER_SUCCESS_PAGE","MEMBER_PENDING_PAGE","MEMBER_FAILURE_PAGE","RECURRING_SUCCESS_PAGE","MEMBER_REVIEW_PAGE","CROSS_BORDER_PAGE","THREE_DS_IFRAME","THREE_DS_IFRAME_ONBRD","UNILATERAL_ERROR_PAGE","CAPTURE_ORDER_PAGE","WEBSCR_ERROR_PAGE","GENERIC_ERROR_PAGE","CRS_ERROR_PAGE","ACCOUNT_HOME","ANONYMOUS_CHECKBOX","ANONYMOUS_TOOLTIP","BACK","CANCEL","CHANGE_COUNTRY","COVER_FEE_CHECKBOX","CURRENCY_CONVERSION","DONE","GUEST_FORM_PAYMENT_SUBMIT_BUTTON","NOT_YOU","ONBOARDING_FORM_PAYMENT_SUBMIT_BUTTON","PRESET_AMOUNT","RECURRING_CHECKBOX","REPORT_LINK","SOCIAL_SHARE","SOCIAL_SHARE_DISMISS","UNIFIED_LOGIN","VOUCHER","VOUCHER_PRINT","VOUCHER_SHARE","ACCOUNT_TYPE","AMOUNT_EDIT_ALLOWED","AUTH_STATE","CAMPAIGN_ID","CHALLENGE_END_TIME","CHALLENGE_START_TIME","CHALLENGE_STATUS","CHARITY_NAME","CHECKBOX","COUNTRY","CURRENCY","DONOR_IP_COUNTRY","EXPERIMENT_ID","FEE_AMOUNT","FEE_CURRENCY","FEE_PAYER","FI_NETWORK","FI_ID","FI_OPERATION","FI_TYPE","FLOW","NONANONYMOUS","NPID","NOTE_ALLOWED","NOTE_ADDED","INTEGRATION_IDENTIFIER","IS_SIGNUP","IS_3DS_ELIGIBLE","ORDER_ID","OFFER_TYPE","PAGE_NAME","PAGE_GROUP","PRODUCT","RECURRING","RESP_DURATION","SCREEN","SELECTED_PRESET_BUTTON_ID","STATUS","STATUS_CODE","TOKEN","THREE_DS_DCC_START_TIME","THREE_DS_DCC_END_TIME","THREE_DS_LOOKUP_END_TIME","THREE_DS_LOOKUP_START_TIME","THREE_DS_REF_ID","THREE_DS_RESP_DURATION","THREE_DS_SPINNER_START_TIME","THREE_DS_SPINNER_END_TIME","THREE_DS_VERSION","TREATMENT_ID","TXN_ID","UI_TYPE","UOB_BUNDLE_TYPE","createBrowserHistory","getUserConfirmation","callback","waitForElement","modalUtils","block","targetLocation","Spinner","reactLazyPreload","importStatement","lazyComponent","reactLazy","preload","FallbackSpinner","customMargin","marginTop","BasicRadioField","dataTestId","labelClassName","tooltipContent","checkedValue","centeredLabel","topLabel","tooltipId","customTooltipClass","BasicSelectField","selectedProgramIdx","option","setState","menuContainerClassName","handleChange","CheckboxField","DropZoneComponent","imgURL","imgWidth","showPreviewInDropzone","displayEditIcon","setDefaultHeight","showSolidBorder","imageSrc","setImageSrc","dropzoneError","setDropzoneError","useDropzone","maxFiles","accept","ALLOWED_IMAGE_TYPES","maxSize","MAX_IMAGE_SIZE","onDrop","acceptedFiles","file","reader","FileReader","onload","original","imgName","img","binaryStr","Image","crossOrigin","el","imgObj","elem","ctx","getContext","drawImage","srcEncoded","canvas","toDataURL","image","readAsDataURL","updated","file_format","onDropRejected","rejections","dropzone","notSupported","tryAgain","getRootProps","getInputProps","maxWidth","for","EditIcon","AddImageIcon","change","tertiary","editButton","changeLogo","imgType","radio","paypalButtonStyle","ownButtonStyle","largeValue","smallValue","countryProperty","languageProperty","selectionLabel","cardLogoCheckbox","renderRadioField","renderButtonStyleDropdown","renderLanguageDropdown","renderCountryDropdown","renderCheckboxField","ButtonStyles","setImageUpdated","optionsForCountry","optionsForLanguage","getValue","Field","component","DropZone","CONFIGURE_BUTTON_PAGE_LOGO_UPDATED","CONFIGURE_BUTTON_PAGE_CHANGE_LOGO_CL","CONFIGURE_BUTTON","IMG_SCALE_SIZE","WIDTH_STEP_1","onlyEditButton","StepHeader","stepHeaders","subheader","orgLabel","orgName","displayNameLabel","displayName","isBusinessAccount","renderOrgNameTextField","OrganizationName","TextAreaWithByteCounter","initialByteCount","setByteCount","maxByteLimit","counterAriaLabel","counterLabel","textLabel","byteLengthOfValue","ariaLabel","counter","renderPurposeTextArea","Purpose","DropzoneLogo","closeModal","setLogoImg","isLogoBusinessProfile","setIsLogoBusinessProfile","logo","checkbox","checkboxHelpText","imageData","setImageData","setShowSpinner","checkboxValue","setCheckboxValue","imageUpdated","showSaveButton","setShowSaveButton","pop","handleImageUpload","Promise","reject","EXPERIENCE_SETUP","processingStage","handleBusinessProfileUpdate","updateLogo","saveLogo","UPLOAD_LOGO_MODAL_SAVE_CL","svgIconComponent","TrashIcon","UPLOAD_LOGO_MODAL_IMAGE_UPDATED","WIDTH_LOGO","UPLOAD_LOGO_MODAL_CHECKBOX_CL","ImageModal","handleCloseModal","UPLOAD_LOGO_MODAL_IM","UPLOAD_LOGO_MODAL_DISMISS_CL","hideTitle","getImageBannerContent","LogoExperience","logoClientError","logoImg","EXPERIENCE_SETUP_PAGE_UPLOAD_LOGO_CL","LogoModal","CropImage","imgUrl","widthBanner","x","y","crop","setCrop","cropAreaPixels","setCropAreaPixels","fade","setFade","urlSrc","setUrlSrc","saveButtonImage","dragImage","getCroppedImage","setAttribute","Math","max","safeArea","sqrt","translate","getImageData","putImageData","round","saveCroppedImage","UPLOAD_BACKGOURND_IMG_MODAL_SAVE_CL","onCropComplete","croppedArea","croppedAreaPixels","fadeOut","fadeIn","onMouseDown","onMouseUp","onMouseLeave","onTouchStart","onTouchEnd","opacity","aspect","onCropChange","objectFit","showGrid","containerStyle","borderRadius","border","grey300","DropzoneImageHandle","imageHandle","handleImageDropzone","UPLOAD_BACKGOURND_IMG_MODAL_IMAGE_UPDATED","imageChange","WIDTH_BANNER","bullets","UPLOAD_BACKGOURND_IMG_MODAL_IM","UPLOAD_BACKGOURND_IMG_MODAL_DISMISS_CL","BannerImage","bannerClientError","handleUploadNewImage","EXPERIENCE_SETUP_PAGE_UPLOAD_BACKGOURND_IMG_CL","cancelButton","back","finishButton","WizardNavButtons","steps","handleBack","handleSubmit","WizardStep1","CONFIGURE_BUTTON_PAGE_IM","EXPERIENCE_SETUP_PAGE_IM","onSubmit","showNewFeatureBadge","WizardStep1Form","reduxForm","keepDirtyOnReinitialize","destroyOnUnmount","forceUnregisterOnUnmount","initialValues","renderReceivableCurrency","Currency","handleAmountFormatChange","anyAmount","fixedAmount","presetHelperText","amount1","amount2","amount3","renderAmountValueField","AmountType","handleAmountTypeChange","normalize","AmountSetup","formattedAmount1","formattedAmount2","formattedAmount3","coverFeesRadio","CoverFeesSwitch","tooltip","recurringRadio","RecurringSwitch","main","FullPageVsPopup","renderContent","mainLabel","jsxLabel","radioLabelClassName","WizardStep2","SET_AMOUNT_PAGE_IM","ProgramsV3","WizardStep2Form","getMailingAddrContent","mailingAddrSubTitle","TemplateData","MailingAddressSwitch","textInfo","renderNoteTextField","Note","advanced","renderBasicInputField","AdvancedUrls","switch","subtitle","cancelUrl","instruction","example","returnUrl","advancedVariables","single","multiple","ExtraVariablesTextArea","setErrors","handleBlur","errorHtml","ADVANCED_SETTINGS","listHeader","renderExtraVariablesAreaField","AdvancedVariables","devDoc","WizardStep3","ADVANCED_SETTINGS_PAGE_IM","WizardStep3Form","WizardStep4","WizardStep4Form","ValuePropCard","imgSrc","valueProp","images","ValueProp","col","loginButton","signUp","Login","handleLogin","handleSignUp","faq","Faq","groups","row","question","answer","ButtonFactoryLogin","LANDING_PAGE_IM","ButtonFactoryV3MobilePreview","mobileAccessibility","previewTabWrapper","paddingLeft","desktop","mobile","previewTitle","previewTitlePayment","PreviewNavigator","selectedTabIdx","setSelectedTabIdx","renderFullPagePreview","center","tabs","panelId","tabIdx","tabsWrapperClassName","propType","trackWizardDetailsPage","pageType","getPageType","tab","previewContainerHeader","WizardStep1Preview","WizardMobilePreview","labels","previewButton","buttonDropzoneSubmit","handleBannerAndLogoErrorCheck","divider","mobileFixedHeight","wrapperClassName","actionable","quitModal","unactionable","previewDonatePage","backFundraisers","toast","duplicatePage","stepTitle","stepCount","progressMeterTitles","ButtonFactoryWizardV3","cancelBtnFptiSpec","setCancelBtnFptiSpec","backBtnFptiSpec","setBackBtnFptiSpec","continueBtnFptiSpec","setContinueBtnFptiSpec","finishBtnFptiSpec","setFinishBtnFptiSpec","backToManageFptiSpec","setBackToManageFptiSpec","feedbackBtnFptiSpec","setFeedbackBtnFptiSpec","previewTabFptiSpec","setPreviewTabFptiSpec","setScreen","showButtonSpinner","setShowButtonSpinner","setLogoClientError","setBannerClientError","isButtonFlow","isButtonConfigurePage","isExperienceSetupPage","isSetAmountPage","isAdvancedSettingsPage","isDuplicating","path","isEditing","isCountryNotSupported","setIsCountryNotSupported","shouldShowQuitModal","setShouldShowQuitModal","shouldShowActionableErrorModal","setShouldShowActionableErrorModal","setErrorCode","errorDesc","setErrorDesc","shouldShowUnactionableErrorModal","setShouldShowUnactionableErrorModal","shouldShowDuplicateToast","setShouldShowDuplicateToast","wizardContainer","getElementsByClassName","initializeWizardComponent","firstPageUrl","handleButtonPreviewError","getLanguage","checkDeviceType","isUnsupported","throttle","CONFIGURE_BUTTON_PAGE_CONTINUE_CL","CONFIGURE_BUTTON_PAGE_NAV_BACK_CL","EXPERIENCE_SETUP_PAGE_FEEDBACK_CL","EXPERIENCE_SETUP_PAGE_CONTINUE_CL","EXPERIENCE_SETUP_PAGE_BACK_CL","EXPERIENCE_SETUP_PAGE_NAV_BACK_CL","EXPERIENCE_SETUP_PAGE_PREVIEW_TAB_CL","SET_AMOUNT_PAGE_CONTINUE_CL","SET_AMOUNT_PAGE_BACK_CL","SET_AMOUNT_PAGE_NAV_BACK_CL","SET_AMOUNT_PAGE_FEEDBACK_CL","SET_AMOUNT_PAGE_PREVIEW_TAB_CL","SET_AMOUNT","ADVANCED_SETTINGS_PAGE_BACK_CL","ADVANCED_SETTINGS_PAGE_NAV_BACK_CL","ADVANCED_SETTINGS_PAGE_FEEDBACK_CL","ADVANCED_SETTINGS_PAGE_PREVIEW_TAB_CL","CONFIGURE_BUTTON_PAGE_CANCEL_CL","EXPERIENCE_SETUP_PAGE_CANCEL_CL","ADVANCED_SETTINGS_PAGE_FINISH_CL","SET_AMOUNT_PAGE_FINISH_CL","handleBackClick","prevPageUrl","handleContinueClick","nextPageUrl","button_size","button_type","card_logo","page_language","receiver_country","display_type","choose_program","curr","fee_type","is_recurring","handleCancelClick","handleTopCancelClick","handleQuitClick","QUIT","closeQuitModal","ALERT_MODAL_CANCEL_CL","dismissQuitModal","ALERT_MODAL_DISMISS_CL","handleServerSideError","errorFieldDetail","errField","errMsg","default","clientFieldName","errObj","targetPage","jumpToErrorPage","wizard","parentNode","marketingFooter","saveButtonErrorHandler","SubmissionError","handleWizardFormSubmit","addr_index","advanced_variables","is_allow_note","redirect_to_url","rcvrcntry","button_id","hosted_button_id","fee_payer","UPLOAD_BUTTON_IMAGE_SAVE_CL","isPayPalImage","logoError","bannerError","missingLogo","missingImage","handleContinueFinishButton","closeActionableErrorModal","ACTIONABLE_ERROR_MODAL_REVIEW_CL","dismissActionableErrorModal","ACTIONABLE_ERROR_MODAL_DISMISS_CL","closeUnactionableErrorModal","ERROR_INTERACTION_DISMISS_CL","handleStartOverFromActionableErrorModal","ACTIONABLE_ERROR_MODAL_START_OVER_CL","handleStartOverFromUnactionableErrorModal","ERROR_INTERACTION_LINK_CL","handleRetry","submit","stepsString","duplicateToast","isSuccess","LANDING_PAGE_LOGIN_CL","LANDING_PAGE_SIGNUP_CL","previewHeader","previewButtonLabel","ACTIONABLE_ERROR_MODAL_IM","review","cancel","msg1","msg2","ERROR_INTERACTION_IM","flow","tryagain","startover","ButtonFactoryWizardFormV3","buttonFactory","bindActionCreators","ButtonFactoryActions","withRouter","store","MarketingHeader","PartnerButtonsV3","PartnerTermsMerchantV3","ButtonOverviewV3","ButtonManagerV3","PartnerTermsCustomerV3","App","fallback","exact","ReactDOM","render","count","MANAGE_PAGE","OVERVIEW_PAGE","WIZARD_STEP_ONE_HOSTED_PAGE","WIZARD_STEP_TWO_HOSTED_PAGE","WIZARD_STEP_THREE_HOSTED_PAGE","WIZARD_STEP_FOUR_HOSTED_PAGE","WIZARD_STEP_ONE_UNHOSTED_PAGE","WIZARD_STEP_TWO_UNHOSTED_PAGE","WIZARD_STEP_THREE_UNHOSTED_PAGE","DEFAULT_FPTI_DATA","account_type","encr_cust_id","SAVED_BUTTONS_DATA","LANDING_PAGE_DEFAULT_DATA","MANAGE_PAGE_DEFAULT_DATA","CONFIGURE_BUTTON_PAGE_DEFAULT_DATA","EXPERIENCE_SETUP_PAGE_DEFAULT_DATA","SET_AMOUNT_PAGE_DEFAULT_DATA","ADVANCED_SETTINGS_PAGE_DEFAULT_DATA","WIZARD_STEP_FOUR_UNHOSTED_PAGE","OVERVIEW_PAGE_DEFAULT_DATA","CLICK","IMPRESSION","ERROR","ACTIVITY","LANDING_PAGE_HEADER_LOGIN_CL","LANDING_PAGE_HEADER_SIGNUP_CL","MANAGE_PAGE_IM","MANAGE_PAGE_CREATE_LINK_CL","MANAGE_PAGE_CREATE_BUTTON_CL","MANAGE_PAGE_MANAGE_BUTTON_CL","MANAGE_PAGE_FEEDBACK_BUTTON_CL","CONFIGURE_BUTTON_PAGE_FEEDBACK_CL","OVERVIEW_PAGE_IM","OVERVIEW_PAGE_SUCCESS_BANNER_IM","OVERVIEW_PAGE_SUCCESS_BANNER_SAVED_BUTTON_CL","OVERVIEW_PAGE_SUCCESS_BANNER_DISMISS_CL","OVERVIEW_PAGE_BACK_CL","OVERVIEW_PAGE_EDIT_NAME_CL","OVERVIEW_PAGE_SAVE_NAME_CL","OVERVIEW_PAGE_EDIT_CL","OVERVIEW_PAGE_PREVIEW_CL","OVERVIEW_PAGE_PREVIEW_DISMISS_CL","OVERVIEW_PAGE_DUPLICATE_CL","OVERVIEW_PAGE_DELETE_CL","OVERVIEW_PAGE_SHARE_CL","OVERVIEW_PAGE_COPY_LINK_CL","OVERVIEW_PAGE_COPY_BUTTON_CL","OVERVIEW_PAGE_DOWNLOAD_QRC_CL","OVERVIEW_PAGE_FEEDBACK_CL","PRODUCT_UPDATE_EXPERIENCE_MODAL_IM","PRODUCT_UPDATE_EXPERIENCE_MODAL_SIDE_SCROLL_CL","PRODUCT_UPDATE_EXPERIENCE_MODAL_DISMISS_CL","DELETE","MANAGE","SUCCESS","middlewares","thunkMiddleware","process","env","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","trace","traceLimit","compose","createStore","rootReducer","applyMiddleware","removeButton","upArrow","downArrow","programNameDefaultField","ProgramFieldV3","showUpArrow","showDownArrow","showDelete","onChangeProgram","newProgramNames","tempProgram","addButton","AddRemoveProgramsV3","addProgram","_","onKeyDown","leftIcon","chooseSpecificPrograms","tip","keyMirror","require","CHANGE_AMOUNT","CHANGE_SYMBOL","CHANGE_CODE","CHANGE_RECURRING","CHANGE_COVER_FEE","CHANGE_FEE_AMOUNT","CHANGE_FORMATED_FEE_AMOUNT","CHANGE_AMOUNT_BEFORE_FEE","CHANGE_ANONYMOUS_STATUS","RP_MODAL_CLOSED","GIFT_AID_IT","CHANGE_FORMATED_AMOUNT","CHANGE_NOTE","CHANGE_CARD_NUMBER","CHANGE_EXP_DATE","CHANGE_SECURITY_CODE","CHANGE_CARD_SPEC","CHANGE_FIRST_NAME","CHANGE_LAST_NAME","CHANGE_ADDRESS","CHANGE_PHONE","CHANGE_EMAIL","CHANGE_PASSWORD","SHOW_LANGUAGE_SELECTOR","UPDATE_CONFIRMATION","POST_BACK_DATA","UPDATE_CURRENT_PAGE","UPDATE_SERVER_ERRORS","PAYMENT_ERROR","UPDATE_SIGN_UP_ERROR","FUNDING_OPTIONS","EMAIL","BILLING_ADDRESS","UPDATE_DONATION_AMOUNT_TYPE","ENABLE_PRESET_AMOUNTS","CHANGE_SHARE_ADDRESS","ADD_CARD_ERROR","UPDATE_SELECTED_PROGRAM","SAVE_FORM_DATA","UPDATE_THREEDS_DATA","UPDATE_SELECTED_PRESET_BUTTON_ID","UPDATE_ORDER_STATUS","EMAIL_REX","DEFAULT_CARD_SPEC","fields","ccNumber","pattern","maxlength","expirationDate","csc","minlength","DONATE_GIFTAID_IT_EXTRA_AMOUNT","PPGF_DISCLAIMER_TOUCHPOINT","GN_CONTENT_TOUCHPOINT","NNA_CONTENT_TOUCHPOINT","BRANDED_CAMPAIGN","GENEROSITY_NETWORK","GENEROSITY_NETWORK_CHARITIES","PP_FUNDRAISING","DW_GIVING_DONATE_SETUP_SCREEN_SHOWN","DW_GIVING_DONATE_SETUP_NEXT_PRESSED","DW_GIVING_DONATE_SETUP_DONATE_WITH_CARD_PRESSED","DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED","DW_GIVING_DONATE_SETUP_TERMS_PRESSED","DW_GIVING_DONATE_SETUP_DISMISS_PRESSED","DW_GIVING_DONATE_SETUP_SHARE_CONTACT_CHECK_PRESSED","DW_GIVING_DONATE_SETUP_SHARE_CONTACT_UNCHECK_PRESSED","DW_GIVING_GUEST_FORM_SCREEN_SHOWN","DW_GIVING_GUEST_FORM_DONATE_PRESSED","DW_GIVING_GUEST_FORM_DISMISS_PRESSED","DW_GIVING_MEMBER_REVIEW_DISMISS_PRESSED","DW_GIVING_PAYMENT_SUCCESS_DISMISS_PRESSED","DW_GIVING_PAYMENT_SUCCESS_DONE_PRESSED","DW_GIVING_PAYMENT_SUCCESS_SCREEN_SHOWN","DW_GIVING_PAYMENT_PENDING_SCREEN_SHOWN","DW_GIVING_PAYMENT_SUCCESS_SHARE_PRESSED","DW_GIVING_SHARE_SCREEN_SHOWN","DW_GIVING_SHARE_CHANNEL_PRESSED","DW_GIVING_SHARE_DISMISS_PRESSED","DW_GIVING_REDIRCT_SCREEN_SHOWN","DW_GIVING_REDIRCT_OPEN_PRESSED","DW_GIVING_REDIRCT_DISMISS_PRESSED","FPTI_PRODUCT","TAB","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","AU_CRS","ABORTED","FAILURE","ABORTED_STATUS_CODE","FAILURE_STATUS_CODE","SUCCESS_STATUS_CODE","SINGLE_TAX_RESIDENCY","MULTI_TAX_RESIDENCY","BTN_IMAGE_MAX_FILE_SIZE","INSTRUMENT_TYPES","HOLDING","PAYMENT_CARD","PAYMENT_TOKEN","BANK_ACCOUNT","CREDIT","UNKNOWN","PAYMENT_CARDS","VISA","MASTERCARD","MASTER_CARD","MAESTRO","AMEX","DISCOVER","JCB","CHINA_UNION_PAY","CDN_HOST_NAME","gncMessages","isGNC","isGN","isBrandedCampaign","isPPFundraising","getMaximumDonationAlertMessage","formatedMaximumAmount","maximumDonationAmount","maximumDonationCurrency","maximumAmountAlert"],"mappings":"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","file":"buttonFactory.2694a003a280e3fdf080.bundle.js","sourcesContent":["import React from 'react';\n\nconst ButtonFactoryPreviewPPLogoHeader = ({}) => {\n return (\n
\n \n
\n );\n};\n\nexport default ButtonFactoryPreviewPPLogoHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ButtonFactoryPreviewPPLogoHeader from './ButtonFactoryPreviewPPLogoHeader';\nimport CommonPreviewComponent from './CommonPreviewComponent';\nimport getLocaleMessages from '../../utils/localesMessages';\nconst messages = getLocaleMessages('buttonsV3/buttonPreview');\n\nfunction ButtonFactoryV3DesktopPreview({\n isButtonOverviewPreview = false,\n showPPHeader = false,\n}) {\n return (\n \n {showPPHeader && }\n
\n \n \n
\n \n \n );\n}\n\nButtonFactoryV3DesktopPreview.propTypes = {\n isButtonOverviewPreview: PropTypes.bool,\n showPPHeader: PropTypes.bool,\n};\n\nexport default ButtonFactoryV3DesktopPreview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { css, StyleSheet } from 'aphrodite';\nimport classNames from 'classnames';\nimport { appendCdnHostName } from '../../../utility/geoUtils';\n\nconst illustrations = {\n critical: appendCdnHostName(\n '/paypal-ui/illustrations/focused/svg/empty-critical.svg'\n ),\n 'more-info': appendCdnHostName('/paypal-ui/illustrations/svg/more-info.svg'),\n 'credit-cards': appendCdnHostName(\n '/paypal-ui/illustrations/svg/credit-cards.svg'\n ),\n success: appendCdnHostName('/paypal-ui/illustrations/svg/success.svg'),\n warning: appendCdnHostName(\n '/paypal-ui/illustrations/focused/svg/empty-warning.svg'\n ),\n activity: appendCdnHostName('/paypal-ui/illustrations/svg/activity.svg'),\n};\n\nconst STYLES = StyleSheet.create({\n large: {\n width: 96,\n },\n small: {\n width: 72,\n },\n});\n\nexport default function Illustration({\n type,\n size = 'large',\n className,\n ariaHidden,\n ...rest\n}) {\n const classes = classNames(className, {\n [css(STYLES.large)]: size === 'large',\n [css(STYLES.small)]: size === 'small',\n });\n\n return (\n \n );\n}\n\nIllustration.propTypes = {\n type: PropTypes.string,\n size: PropTypes.string,\n className: PropTypes.string,\n ariaHidden: PropTypes.bool,\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { TextInput } from '@paypalcorp/pp-react';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nclass BasicInputField extends Component {\n static propTypes = {\n input: PropTypes.object,\n label: PropTypes.string,\n meta: PropTypes.object,\n id: PropTypes.string,\n validateOnBlur: PropTypes.bool,\n readOnly: PropTypes.bool,\n helpText: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n type: PropTypes.string,\n customError: PropTypes.string,\n showError: PropTypes.bool,\n className: PropTypes.string,\n validateOnChange: PropTypes.bool,\n };\n\n render() {\n const {\n input,\n label,\n meta: { touched, error, active },\n id,\n validateOnBlur,\n readOnly,\n helpText,\n customError,\n showError,\n className,\n validateOnChange = false,\n } = this.props;\n\n const errorMsg = error || customError,\n hasError =\n showError ||\n (validateOnChange && errorMsg) ||\n (validateOnBlur ? !active && touched && errorMsg : touched && errorMsg),\n type = this.props.type || 'text';\n\n if (hasError && !active) {\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'INPUT_FIELD_VALIDATION_ERROR',\n error_desc: id,\n error_detail: errorMsg,\n });\n }\n\n return (\n \n );\n }\n}\nexport default BasicInputField;\n","import AppDispatcher from '../dispatcher/AppDispatcher';\nimport * as AppConstants from '../utility/constants';\n\nexport function changeAmount(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_AMOUNT,\n item: item,\n });\n}\n\nexport function changeSymbol(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_SYMBOL,\n item: item,\n });\n}\n\nexport function changeCode(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_CODE,\n item: item,\n });\n}\n\nexport function changeFormatedAmount(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_FORMATED_AMOUNT,\n item: item,\n });\n}\n\nexport function changeRecurring(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_RECURRING,\n item: item,\n });\n}\n\nexport function changeRecurringModalStatus(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.RP_MODAL_CLOSED,\n item: item,\n });\n}\n\nexport function changeCoverFee(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_COVER_FEE,\n item: item,\n });\n}\n\nexport function changeAnonymousStatus(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_ANONYMOUS_STATUS,\n item: item,\n });\n}\n\nexport function changeFeeAmount(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_FEE_AMOUNT,\n item: item,\n });\n}\n\nexport function changeFormatedFeeAmount(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_FORMATED_FEE_AMOUNT,\n item: item,\n });\n}\n\nexport function changeAmountBeforeFee(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_AMOUNT_BEFORE_FEE,\n item: item,\n });\n}\n\nexport function changeNote(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_NOTE,\n item: item,\n });\n}\n\nexport function changeCountry(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_COUNTRY,\n item: item,\n });\n}\n\nexport function updateConfirmation(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_CONFIRMATION,\n item: item,\n });\n}\n\nexport function updatePostBackData(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.POST_BACK_DATA,\n item: item,\n });\n}\n\nexport function updateCurrentPage(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_CURRENT_PAGE,\n item: item,\n });\n}\n\nexport function updateServerErrors(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_SERVER_ERRORS,\n item: item,\n });\n}\n\nexport function updatePaymentError(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.PAYMENT_ERROR,\n item: item,\n });\n}\n\nexport function updateSignUpError(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_SIGN_UP_ERROR,\n item: item,\n });\n}\n\nexport function updateFundingOptions(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.FUNDING_OPTIONS,\n item: item,\n });\n}\n\nexport function updateEmail(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.EMAIL,\n item: item,\n });\n}\n\nexport function updateBillingAddress(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.BILLING_ADDRESS,\n item: item,\n });\n}\n\n/**\n * Sets the donation amount type\n * @param {String} type type of donation amount - \"preset\" or \"userinput\"\n */\nexport function updateDonationAmountType(donationAmountType) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_DONATION_AMOUNT_TYPE,\n item: donationAmountType,\n });\n}\n\n/**\n * Sets the giftaidit type\n * @param {Boolean}\n */\nexport function updateGiftaidItFlag(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.GIFT_AID_IT,\n item: item,\n });\n}\n\n/**\n * Sets the shareAddress checkbox\n * @param {Boolean} shareAddress checkbox value\n */\nexport function updateShareAddress(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_SHARE_ADDRESS,\n item: item,\n });\n}\n\n/**\n * Sets the any card releated errors\n * @param {String} card error\n */\nexport function updateAddCardError(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.ADD_CARD_ERROR,\n item: item,\n });\n}\n\nexport function updateSelectedProgram(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_SELECTED_PROGRAM,\n item: item,\n });\n}\n\nexport function changeCardSpec(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.CHANGE_CARD_SPEC,\n item: item,\n });\n}\n\nexport function saveFormData(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.SAVE_FORM_DATA,\n item,\n });\n}\n\nexport function updateSelectedPresetButtonId(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_SELECTED_PRESET_BUTTON_ID,\n item,\n });\n}\n\nexport function updateThreeDSData(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_THREEDS_DATA,\n item,\n });\n}\n\nexport function showLanguageSelector(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.SHOW_LANGUAGE_SELECTOR,\n item,\n });\n}\n\nexport function updateOrderStatus(item) {\n AppDispatcher.handleViewAction({\n actionType: AppConstants.UPDATE_ORDER_STATUS,\n item,\n });\n}\n","import { fetch as fetchPolyfill } from 'whatwg-fetch';\nimport 'consumerweb-shim';\n\nexport const polyfillFetch = (url, options) => {\n return fetchPolyfill(url, options);\n};\n","import dompurify from 'dompurify';\nimport { polyfillFetch } from './polyfillFetch';\n\n/**\n * This will take a node and select the given range of text from start to end in a\n * way that works for iOS\n * @param {HTMLInputElement} node - the input to select the text in\n * @param {Number} start - the index to start the selection\n * @param {Number} end - the index to end the selection\n */\nexport function selectRangeOfText(node, start, end) {\n // select all the text, but do it on the next tick because iOS has issues otherwise\n setTimeout(() => {\n // we're using setSelectionRange rather than select because select doesn't work with iOS\n node.setSelectionRange(start, end);\n });\n}\n\n/**\n * This moves the cursor position to the end of the text in the input node in a way\n * that works on iOS\n * @param {HTMLInputElement} node - the input to set the cursor position in\n */\nexport function moveCursorToTheEnd(node) {\n const { length } = node.value;\n node.setSelectionRange(length, length);\n}\n\nexport function sanitizeInPlace(node) {\n if (!node) return null;\n return dompurify.sanitize(node, { IN_PLACE: true });\n}\n\nexport function sanitizeURL(url = '') {\n const dirtyNode = document.createElement('a');\n dirtyNode.setAttribute('href', url);\n const clean = sanitizeInPlace(dirtyNode);\n return clean?.getAttribute('href');\n}\n\n/**\n * Sanitizes HTML\n */\nexport function sanitizeOrgName(input) {\n try {\n return dompurify\n .sanitize(input)\n .replace(//g, '>');\n } catch (e) {\n return '';\n }\n}\n\n/**\n * Sanitizes HTML\n */\nexport function sanitize(input) {\n try {\n return escapeHtml(dompurify.sanitize(input));\n } catch (e) {\n return '';\n }\n}\n\nfunction escapeHtml(unsafe) {\n return unsafe\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * This function shows the hidden element\n * @param {string} selector - element selector\n * @param {string} [display] - display property value\n */\nexport function show(selector, display = 'block') {\n const elementsToShow = document.querySelectorAll(selector);\n for (let i = 0; i < elementsToShow.length; i++) {\n elementsToShow[i].style.display = display;\n }\n}\n\n/**\n * This function hides the selected element\n * @param {string} selector - element selector\n */\nexport function hide(selector) {\n const elementsToHide = document.querySelectorAll(selector);\n for (let i = 0; i < elementsToHide.length; i++) {\n elementsToHide[i].style.display = 'none';\n }\n}\n\n/**\n * This function sets the value of the value attribute for all matched elements\n * @param {string} selector - elements selector\n * @param {string} value - value to set\n */\nexport function setValue(selector, value) {\n const elementsSelected = document.querySelectorAll(selector);\n for (let i = 0; i < elementsSelected.length; i++) {\n elementsSelected[i].value = value;\n }\n}\n\n/**\n * This function creates a serialized representation of an array or an object for use in a URL query string or Ajax request\n * @param {Array|Object} arrORObj - array or Object\n */\nexport var objectOrArrayToQueryString = function (arrOrObj) {\n var prefix, s, add, name, r20, output;\n s = [];\n r20 = /%20/g;\n add = function (key, value) {\n // If value is a function, invoke it and return its value\n let val = value === null ? '' : value;\n value = typeof value === 'function' ? value() : val;\n s[s.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value);\n };\n if (arrOrObj instanceof Array) {\n for (name in arrOrObj) {\n add(name, arrOrObj[name]);\n }\n } else {\n for (prefix in arrOrObj) {\n buildParams(prefix, arrOrObj[prefix], add);\n }\n }\n output = s.join('&').replace(r20, '+');\n return output;\n};\n\nfunction buildParams(prefix, obj, add) {\n var name, i, l, rbracket;\n rbracket = /\\[\\]$/;\n if (obj instanceof Array) {\n for (i = 0, l = obj.length; i < l; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(\n prefix + '[' + (typeof obj[i] === 'object' ? i : '') + ']',\n obj[i],\n add\n );\n }\n }\n } else if (typeof obj === 'object') {\n // Serialize object item.\n for (name in obj) {\n buildParams(prefix + '[' + name + ']', obj[name], add);\n }\n } else {\n // Serialize scalar item.\n add(prefix, obj);\n }\n}\n\n/**\n * Gets the offset top value relative to the document of the first DOM element that match the selector received as argument\n * @param {String} selector\n */\nexport function getOffsetTop(selector) {\n try {\n const element = document.querySelector(selector);\n return element.getBoundingClientRect().top + window.scrollY;\n } catch (e) {\n return 0;\n }\n}\n\n/**\n * This function will return the children of the selected element\n * @param {string} selector - element selector\n */\nexport function getChildren(selector) {\n const elementsSelected = document.querySelector(selector);\n return elementsSelected.children;\n}\n\n/**\n * This function will add the class provided to the element or elements\n * @param {string} selector - elements selector\n * @param {string[]} classNames - array of class name(s) to add\n */\nexport function addClass(selector, classNames) {\n const elementsSelected = document.querySelectorAll(selector);\n for (let i = 0; i < elementsSelected.length; i++) {\n elementsSelected[i].classList.add(...classNames);\n }\n}\n\n/**\n * This function will remove the class provided from the element or elements\n * @param {string} selector - elements selector\n * @param {string[]} classNames - array of class name(s) to remove\n */\nexport function removeClass(selector, classNames) {\n const elementsSelected = document.querySelectorAll(selector);\n for (let i = 0; i < elementsSelected.length; i++) {\n elementsSelected[i].classList.remove(...classNames);\n }\n}\n\n/**\n * This function will call fetch with additional headers and also uses a polyfill for IE\n * @param {string} url - url to access\n * @param {object} options - optional parameters\n */\nexport function fetcher(url, options = {}) {\n let csrf = document.querySelector('body').dataset.csrf;\n // This event is fired every time that a fetch is made and helps the user to extend session\n fireEvent('fetchCall');\n options.headers = {\n ...options.headers,\n 'X-CSRF-Token': csrf,\n 'Content-Type': 'application/json; charset=UTF-8',\n 'X-Requested-With': 'XMLHttpRequest',\n };\n\n if (window.fetch) {\n if (window.location.href.indexOf('donate/buttons') > -1) {\n return fetch(url, options).then((response) => handleErrors(response));\n }\n return fetch(url, options);\n }\n return polyfillFetch(url, options);\n}\n/**\n * This function will look at the fetch response and determine if there are any network\n * erros and how to respond\n */\n\nfunction handleErrors(response) {\n if (response.status !== 401) {\n return response;\n }\n handleFetch401Error();\n}\n\nfunction handleFetch401Error() {\n const currentTargetPath = window.location.pathname;\n const returnPath = currentTargetPath.replace(/(\\/*donate)/, ''); // some browsers don't put a leading '/'\n const renderURL = `/donate/buttons/login?returnUri=${returnPath}`;\n // Need to do in this way because window.location.href doesn't update referer in http req header\n window.history.pushState(null, null, renderURL);\n location.reload();\n}\n\n/**\n * Utility function for firing an event\n * @param {*} eventName\n */\nfunction fireEvent(eventName) {\n const event = document.createEvent('Event');\n event.initEvent(eventName, true, true);\n document.dispatchEvent(event);\n}\n/**\n * Executes the callback received just when all the DOM elements are safe to be manipulated. Similar to jQuery $.ready() function.\n * @param {function} callback\n */\nexport function documentReady(callback) {\n // in case the document is already rendered\n if (document.readyState !== 'loading') {\n return callback();\n }\n // modern browsers\n else if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', callback);\n }\n // IE <= 8\n else {\n document.attachEvent('onreadystatechange', function () {\n if (document.readyState === 'complete') {\n return callback();\n }\n });\n }\n}\n\nfunction isElement(obj) {\n try {\n return obj instanceof HTMLElement;\n } catch (e) {\n return (\n typeof obj === 'object' &&\n obj.nodeType === 1 &&\n typeof obj.style === 'object' &&\n typeof obj.ownerDocument === 'object'\n );\n }\n}\n\nfunction getElement(selectorOrElement) {\n if (isElement(selectorOrElement)) {\n return selectorOrElement;\n } else if (typeof selectorOrElement === 'string') {\n return document.querySelector(selectorOrElement);\n }\n return null;\n}\n\n/**\n * Scrolls element into view\n * @param {String | HTMLElement} selectorOrElement\n */\nexport function scrollElementIntoView(selectorOrElement) {\n const element = getElement(selectorOrElement);\n if (element) {\n element.scrollIntoView({\n behavior: 'smooth',\n });\n }\n}\n\nconst _noOpFunction = () => {};\n\nconst body = document.querySelector('body');\nconst safeScrollElement = body.scrollTo\n ? (element, options) => {\n element.scrollTo(options);\n }\n : _noOpFunction;\n\nconst safeScrollWindow = window.scrollTo\n ? (options) => {\n window.scrollTo(options);\n }\n : _noOpFunction;\n\n/**\n * Scrolls element or window to specified y location\n * @param {String | HTMLElement} selectorOrElement\n * @param { Number } scrollY\n */\nexport function scrollElementTo(selectorOrElement, scrollY = 0) {\n const element = getElement(selectorOrElement);\n if (element && element.scrollTop !== scrollY) {\n safeScrollElement(element, {\n top: scrollY,\n behavior: 'smooth',\n });\n } else if (window.pageYOffset !== scrollY) {\n safeScrollWindow({\n top: scrollY,\n behavior: 'smooth',\n });\n }\n}\n\n/**\n * Get {x, y} coordinates for HTML element\n * @param {String | HTMLElement} selectorOrElement\n */\nexport function getPosition(selectorOrElement) {\n let element = getElement(selectorOrElement);\n\n let xPosition = 0;\n let yPosition = 0;\n\n while (element) {\n xPosition += element.offsetLeft - element.scrollLeft + element.clientLeft;\n yPosition += element.offsetTop - element.scrollTop + element.clientTop;\n element = element.offsetParent;\n }\n\n return { x: xPosition, y: yPosition };\n}\n\n/**\n * Scrolls to specified y location\n * @param {String | HTMLElement} selectorOrElement\n * @param { Number } scrollY\n */\nexport function scrollTo(selectorOrElement, scrollY) {\n const element = getElement(selectorOrElement);\n if (element && typeof scrollY === 'number' && !Number.isNaN(scroll)) {\n safeScrollElement(element, {\n top: scrollY,\n behavior: 'smooth',\n });\n }\n}\n","let serverProps;\n\nexport function getServerProps() {\n // grab the node which contains props\n const serverPropsNode = document.getElementById('server-props');\n\n // grab innerHTML (which is the props as JSON); default to strignified empty object\n const serverPropsJSON =\n (serverPropsNode && serverPropsNode.innerHTML) || '{}';\n\n // parse the JSON strings to JavaScript objects\n // TODO: Consider wrapping these in try/catches\n try {\n serverProps = JSON.parse(serverPropsJSON);\n } catch (e) {\n serverProps = {};\n }\n return serverProps;\n}\n","import templateData from './getTemplateData';\n\nexport const appendCdnHostName = (url) => {\n return `${templateData.cdnHostName}${url}`;\n};\n","/*\n * paypalphrodite = paypal + aphrodite\n * This is our little wrapper around aphrodite so we can customize it.\n * In particular it allows us to\n */\n\nimport { css, StyleSheet } from 'aphrodite';\nimport rtlConvert from 'rtl-css-js';\nimport templateData from './getTemplateData';\n\nlet shouldRTL = false;\n// instead of aphrodite's StyleSheet, expose our own\nconst PayPalStyleSheet = { ...StyleSheet, create: customCreate };\n\nfunction setShouldRTL(newVal) {\n shouldRTL = newVal;\n}\n\nfunction customCreate(cssInJSObject, ...rest) {\n return StyleSheet.create(rtlConvertInline(cssInJSObject), ...rest);\n}\n\nfunction rtlConvertInline(cssInJSObject) {\n if (shouldRTL) {\n return rtlConvert(cssInJSObject);\n }\n return cssInJSObject;\n}\n\nfunction initializeRtl() {\n const { contextLocalityDir = '' } = templateData || {};\n setShouldRTL(!(contextLocalityDir === 'ltr'));\n}\n\ninitializeRtl();\n\nexport { setShouldRTL, rtlConvertInline, css, PayPalStyleSheet as StyleSheet };\n","import templateData from '../utility/getTemplateData';\nimport appStore from '../stores/AppStore';\nimport { normalizeNumber } from './formator';\nimport { isAmountGreaterThanZero } from '../components/amount/amountUtils';\nimport { getParameterByName } from './queryStringHelper';\nimport { show, hide, addClass, removeClass, fetcher } from './domUtils';\nimport { isOptInCoverFee } from '../components/coverFee/feeUtils';\nimport find from 'lodash/find';\n\nconst FROMUL_QUERY_PARAM = 'fromUL';\nconst SDKMETA_QUERY_PARAM = 'sdkMeta';\n\nexport const addShake = () => {\n addClass('.inputField .money_input', ['animated', 'shake']);\n setTimeout(() => {\n removeClass('.inputField .money_input', ['animated', 'shake']);\n }, 1000);\n};\n\nexport const showSpinnerOverlay = () => {\n show('.spinneroverlay');\n\n const waitTextEl = document.getElementById('waitText');\n if (waitTextEl) {\n waitTextEl.focus();\n\n // Added this so mouse user will not always see the focus box\n waitTextEl.style.outline = 'none';\n\n // Since there is only one focusable element within the spinner\n // overlay, prevent any behaviour from occurring when the user\n // presses the TAB key\n waitTextEl.onkeydown = function (event) {\n // Add style back when user tries to manually focus on it\n waitTextEl.style.outline = 'thin dotted';\n waitTextEl.style.outline = '5px auto -webkit-focus-ring-color';\n waitTextEl.style.outlineOffset = '-2px';\n if (event.keyCode === 9 && document.activeElement === waitTextEl) {\n event.preventDefault();\n }\n };\n }\n};\n\nconst getFirstNonHiddenFocusableEl = (elements) => {\n return find(elements, (el) => {\n return el.type !== 'hidden';\n });\n};\n\n// After spinner exits, we need to set focus to the first fosable element\n// Assuming that focus should be set with either the gdpr cookie banner or donateWrapper\n// If any flow use a different main component, should update here\nexport const setFocus = () => {\n const elementWrapper =\n document.getElementById('gdprCookieContent_wrapper') ||\n document.getElementById('donateWrapper');\n\n if (elementWrapper) {\n // If there is no focusable element, will get text element\n let focusable =\n elementWrapper.querySelectorAll(\n 'button:not([hidden]),[href]:not([hidden]), input:not([hidden]), select:not([hidden]), textarea:not([hidden]), [tabindex]:not([tabindex=\"-1\"]):not([hidden])'\n ) ||\n elementWrapper.querySelectorAll('p:not([hidden]), span:not([hidden])');\n\n const firstFocusableEl = getFirstNonHiddenFocusableEl(focusable);\n\n if (firstFocusableEl) {\n firstFocusableEl.style.outline = 'none';\n firstFocusableEl.focus();\n\n firstFocusableEl.onkeydown = function () {\n firstFocusableEl.style.outline = 'thin dotted';\n firstFocusableEl.style.outline = '5px auto -webkit-focus-ring-color';\n firstFocusableEl.style.outlineOffset = '-2px';\n };\n\n firstFocusableEl.onblur = function () {\n firstFocusableEl.style.outline = 'none';\n };\n }\n }\n};\n\nexport const hideSpinnerOverlay = () => {\n hide('.spinneroverlay');\n};\n\nexport const updateDonation = (redirecturl, clearSavedFormData) => {\n const amount = appStore.getDonationAmount();\n let data = {\n token: templateData.token,\n amount: normalizeNumber(amount),\n donationAmountType:\n appStore.getDonationAmountType() === 'preset' ? 'preset' : 'userinput',\n currencyCode: templateData.donationCode,\n donationNote: appStore.getDonationNote() || '',\n recurring: appStore.getDonationRecurring(),\n addCardError: appStore.getAddCardError(),\n giftAidItFlag: appStore.getGiftaidItFlagStatus(),\n selectedProgram: appStore.getSelectedProgram(),\n selectedPresetButtonId: appStore.getSelectedPresetButtonId(),\n };\n\n if (templateData.coverFeeEnabled) {\n data.feePayer = isOptInCoverFee() ? 'consumer' : 'merchant';\n data.feeCurr = appStore.getDonationCode();\n data.feeAmount = appStore.getFeeAmount();\n data.rawAmount = appStore.getAmountBeforeFee();\n }\n\n if (templateData.anonymousEnabled) {\n data.anonymousStatus = appStore.getAnonymousStatus();\n }\n\n if (clearSavedFormData) {\n data.clearSavedFormData = clearSavedFormData;\n }\n\n showSpinnerOverlay();\n fetcher('/donate/update/donation', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then((result) => {\n showSpinnerOverlay();\n // console.log('DATA result', result);\n window.location.href = redirecturl;\n })\n .catch(() => {\n showSpinnerOverlay();\n // On juno update failure, redirecting to landing page\n // Juno token will be re-validated and will handle following cases\n // Case 1: Display generic error page for expired token\n // Case 2: Start new flow, if token is valid.\n let failureUrl = '/donate?token=' + templateData.token;\n window.location.href = failureUrl;\n });\n};\n\n/*\n * Handles for loaging any CAL event.\n */\nexport const logCalEvent = (message) => {\n fetcher('/donate/event/logger', {\n method: 'POST',\n body: JSON.stringify({\n message,\n }),\n });\n};\n\n/*\n * Handles for redirect to UL.\n */\nexport const handleLogIn = () => {\n let donationAmount = appStore.getDonationAmount();\n\n if (isAmountGreaterThanZero(donationAmount)) {\n let url = `/donate/member?token=${templateData.token}`;\n if (getParameterByName(FROMUL_QUERY_PARAM) === 'true') {\n url = `${url}&${FROMUL_QUERY_PARAM}=true`;\n }\n const sdkMeta = templateData.sdkMeta;\n const targetMeta = getParameterByName('targetMeta') || '';\n\n if (sdkMeta) {\n url = `${url}&${SDKMETA_QUERY_PARAM}=${sdkMeta}`;\n }\n if (targetMeta) {\n url = `${url}&targetMeta=${targetMeta}`;\n }\n\n updateDonation(url);\n } else {\n addShake();\n }\n};\n\n/*\n * Handles for redirect to guest.\n */\nexport const handleGuestCountryChange = (url) => {\n updateDonation(url, true);\n};\n\n/*\n * Handles if token is reused to access donate app to make second payment.\n */\nexport const handleTokenReuse = () => {\n const paymentStatus = templateData.paymentStatus || '';\n const token = templateData.token;\n if (paymentStatus === 'complete') {\n window.location.href = `/donate/paymentComplete?token=${token}`;\n }\n};\n\nexport const removeDuplicateErrors = (errorMessages = []) => {\n let uniqueErrorMsgs = errorMessages.reduce((uniqueErr, errMsg) => {\n if (!uniqueErr.some((errMsgObj) => errMsgObj.value === errMsg.value)) {\n uniqueErr.push(errMsg);\n }\n return uniqueErr;\n }, []);\n return uniqueErrorMsgs;\n};\n\nexport const parseErrorResponse = (errors, errorMessages) => {\n let messages = [],\n allErrorCodes = errors.details;\n\n for (let i in allErrorCodes) {\n let code = allErrorCodes[i].name,\n message = errorMessages[code];\n if (message) {\n messages.push({\n key: i,\n value: message,\n });\n }\n }\n messages = removeDuplicateErrors(messages);\n\n if (messages.length === 0) {\n let message = errorMessages.GENERIC_ERROR;\n if (message) {\n messages.push({\n key: 0,\n value: message,\n });\n }\n }\n return messages;\n};\n\nexport const parseValErrResp = (errors, dump, GENERIC_ERROR) => {\n let messages = [],\n allErrorCodes = errors.errorData || [];\n for (let allError in allErrorCodes) {\n let code =\n allErrorCodes[allError].errorCode || allErrorCodes[allError].code,\n message = dump[code];\n\n if (message) {\n messages.push({\n key: allError,\n value: message,\n });\n }\n }\n\n if (messages.length === 0) {\n let message = dump[GENERIC_ERROR];\n if (message) {\n messages.push({\n key: 0,\n value: message,\n });\n }\n }\n return messages;\n};\n\nexport const getErrFields = (errors) => {\n let allFields = [],\n allErrorCodes = errors.errorData || [];\n for (let allError in allErrorCodes) {\n allFields.push({\n key: allError,\n type: allErrorCodes[allError].code,\n fields: allErrorCodes[allError].fields,\n });\n }\n\n if (allFields.length === 0) {\n allFields.push({\n key: 0,\n type: 'VALIDATION_ERROR',\n });\n }\n\n return allFields;\n};\n\n/**\n * Checks whether minimum donation restriction should be enforced.\n * @return {Boolean} true if currency code is USD\n */\nexport const shouldEnforceMinimumDonation = () => {\n // @TODO: Check for corpIp\n // TemplateData.isCorpIp\n if (\n templateData.donationAmountEditable &&\n ['USD'].indexOf(templateData.donationCode) >= 0\n ) {\n return true;\n }\n return false;\n};\n\n/**\n * Gets minimum donation for current currency\n * @return {Number} 1 for USD, 0 otherwise\n */\nexport const getMinimumDonation = () => {\n // @TODO: Check for corpIp\n // && !TemplateData.isCorpIp\n if (['USD'].indexOf(templateData.donationCode) >= 0) {\n return 1;\n }\n return 0;\n};\n\n/**\n * Validates the donation amount restriction for USD\n * @return { Boolean } Returns false if validation fails, true otherwise\n */\nexport const validateDonationAmountForUS = () => {\n if (shouldEnforceMinimumDonation()) {\n const donationAmount = appStore.getDonationAmount() || 0;\n const minimumDonation = getMinimumDonation();\n if (donationAmount < minimumDonation) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * Checks whether to show the promotion for HurricaneHarvey or not\n * Please note: Currently disabled. Always returns false.\n */\nexport const shouldShowHurricaneHarveyPromotion = () => {\n return false;\n // Check merchant and user country\n // const userCountry = templateData.country;\n // const userLanguage = templateData.language;\n\n // return userCountry === 'US' && userLanguage === 'en';\n};\n\n/**\n * Sets country and locale in the provided string\n * @param {String} str String to set country and locale on\n * @param {String} country Country code like 'AU', 'US'\n * @param {String} locale locale code like 'en_AU', en_US'\n * @return {String} Original string with country and locale\n */\nexport const setCountryAndLocale = (str) => {\n str = str.replace(new RegExp('{country}', 'g'), templateData.country);\n str = str.replace(\n new RegExp('{locale}', 'g'),\n `${templateData.language}_${templateData.country}`\n );\n str = str.replace(new RegExp('{brand}', 'g'), templateData.brand);\n str = str.replace(new RegExp('{language}', 'g'), templateData.language);\n return str;\n};\n\nexport const isLTR = () => {\n const { contextLocalityDir } = templateData;\n return contextLocalityDir === 'ltr';\n};\n\nexport const getPPCCStatus = () => {\n const { merchantPpccStatus } = templateData;\n return merchantPpccStatus\n ? merchantPpccStatus.toUpperCase()\n : merchantPpccStatus;\n};\n\nexport const waitForElementToDisplay = (selector, time, callback) => {\n if (document.querySelector(selector) !== null) {\n callback(); // eslint-disable-line\n } else {\n setTimeout(function () {\n waitForElementToDisplay(selector, time, callback);\n }, time);\n }\n};\n\nexport const observeUntilEventObserved = (targetNode, options, callback) => {\n const mutationObserver = new MutationObserver(function (mutations, observer) {\n callback(observer);\n });\n\n mutationObserver.observe(targetNode, options);\n};\n\nexport const getInitialDataInDom = () => {\n const initialDataInDom = document.getElementById('initialData');\n if (initialDataInDom) {\n return JSON.parse(initialDataInDom.innerHTML || '{}');\n }\n};\n\n// export default {\n// \taddShake: addShake,\n// \tupdateDonation: updateDonation,\n// \tlogCalEvent: logCalEvent,\n// \thandleLogIn: handleLogIn,\n// \thandleGuestCountryChange: handleGuestCountryChange,\n// \thandleTokenReuse: handleTokenReuse,\n// \tremoveErrors: removeErrors,\n// \tserializeFormData: serializeFormData,\n// \tparseErrorResponse: parseErrorResponse,\n// \tparseValErrResp: parseValErrResp,\n// \tgetErrFields: getErrFields,\n// \tisLTR,\n// \tgetPPCCStatus,\n// \tshouldEnforceMinimumDonation,\n// \tvalidateDonationAmountForUS,\n// \tshouldShowHurricaneHarveyPromotion,\n// \tsetCountryAndLocale,\n// \tshowSpinnerOverlay,\n// \thideSpinnerOverlay\n// }\n","import { appendCdnHostName } from '../../../../utility/geoUtils';\n\nexport const VOUCHER_TYPE_CUSTOM = 'custom';\nexport const VOUCHER_TYPE_DISCOUNT = 'discount';\nexport const VOUCHER_TYPE_PERCENTAGE = 'percentage';\nexport const VOUCHER_TYPE_DOLLAR = 'dollar';\n\nexport const ALL_VOUCHER_TYPE_INFO = [\n {\n type: VOUCHER_TYPE_PERCENTAGE,\n },\n {\n type: VOUCHER_TYPE_DOLLAR,\n },\n {\n type: VOUCHER_TYPE_CUSTOM,\n },\n];\n\nexport const VOUCHER_INFO_TAGLINE = 'tagline';\nexport const VOUCHER_INFO_DETAILS = 'details';\n\nexport const VOUCHER_MAX_CHAR_LENGTH = 127;\nexport const MESSAGE_TO_DONORS_MAX_BYTE_LENGTH = 127;\nexport const VOUCHER_MAX_FILE_SIZE = 2000000; // 2MB\nexport const ALLOWED_FILE_EXTENSIONS = ['jpg', 'gif', 'png'];\nexport const ALLOWED_FILE_TYPES = ['image/jpeg', 'image/gif', 'image/png'];\nexport const MESSAGE_INTERPOLATION_KEY = '{businessName}';\n\nexport const VOUCHER_INPUT_FIXED = 'FIXED';\nexport const VOUCHER_INPUT_PERCENTAGE = 'PERCENTAGE';\nexport const VOUCHER_INPUT_CUSTOM = 'CUSTOM';\nexport const VOUCHER_DISCOUNT_DEFAULT_VALUE = 5;\n\nexport const GENERIC_VOUCHER_FLOW = 'generic';\nexport const DEFAULT_LOGO_URL = appendCdnHostName(\n '/ppcp/images/covid/donations@x600.png'\n);\nexport const DISPLAY_DEFAULT_MERCHANT_NAME = 'Acme Inc';\n\nexport const INVALID_ADDRESS_ERROR = 'INVALID_ADDRESS';\n","import { isLoggedInUser } from './authUtils';\n\nconst MOBILE_MODE_THRESHOLD_WIDTH = 1024;\n\nconst getReactButtonsContainerMarginTopExtension = () => {\n if (isLoggedInUser() && window.innerWidth < MOBILE_MODE_THRESHOLD_WIDTH) {\n const { pathname } = window.location;\n if (pathname.includes('/donate/buttons/manage')) {\n return 0;\n } else if (pathname.includes('/donate/buttons')) {\n return 7;\n }\n }\n\n return 30;\n};\n\nexport function setContainerMargins() {\n const merchantHeader = document.getElementById(\n 'merchant-header-main-wrapper-internal'\n );\n const reactButtonsContainer = document.getElementById(\n 'react-buttons-container'\n );\n\n if (merchantHeader && reactButtonsContainer) {\n const merchantHeaderHeight = merchantHeader.offsetHeight;\n const reactButtonsContainerMarginTop =\n merchantHeaderHeight + getReactButtonsContainerMarginTopExtension();\n reactButtonsContainer.style.margin = `${reactButtonsContainerMarginTop}px auto 0`;\n }\n}\n\n/**\n * Listens to merchantHeaderMarginUpdate events\n * and sets the appropriate margin between\n * the site header and the elements beneath it.\n * The merchantHeaderMarginUpdate is a custom event\n * the marketing team's code dispatches when the header loads\n * and also when the header changes size formats.\n */\nexport function setContainerMarginsBefore() {\n document.addEventListener('merchantHeaderMarginUpdate', () => {\n setContainerMargins();\n });\n}\n","import { BodyText, Button, HeadingText, Tile } from '@paypalcorp/pp-react';\nimport React from 'react';\nimport { getUserType } from '../../utils/buttonFactoryUtils';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport Illustration from '../illustrations/Illustration';\n\nconst { countryNotSupported: { header, msg, button } = {} } = ({} =\n getLocaleMessages('buttonsV3/errors'));\n\nconst CountryNotSupportedTile = () => {\n const goToDashboard = () => {\n const userType = getUserType();\n window.location.pathname =\n userType === 'BUSINESS' ? '/mep/dashboard' : '/myaccount/summary';\n };\n\n return (\n \n \n \n {header}\n \n {msg}\n \n {button}\n \n \n );\n};\n\nexport default CountryNotSupportedTile;\n","import getStore from '../store/configureStore';\nimport _get from 'lodash/get';\n\nexport function getDonateButtonImageUrl(\n buttonSize,\n showAcceptedCardLogos,\n languageCode,\n countryCode\n) {\n const reduxStore = getStore();\n const countryAndLanguageDetails = _get(\n reduxStore.getState(),\n 'application.countryAndLanguageDetails'\n );\n let url = _get(\n countryAndLanguageDetails,\n `countriesByCode.${countryCode}.languages.${languageCode}.buttonImageUrl`,\n {}\n );\n\n if (buttonSize === 'large') {\n if (showAcceptedCardLogos) {\n url = url.cc;\n } else {\n url = url.large;\n }\n } else {\n url = url.small;\n }\n\n return url;\n}\n","import React from 'react';\nimport { BodyText, Icon, Link } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../utils/localesMessages';\nimport PropTypes from 'prop-types';\nimport { trackEventWithData } from '../utilsV3/analytics';\n\nconst { buttonFeedback } = getLocaleMessages('buttonsV3/common');\n\nfunction DonateButtonFeedback({ currentStep, fptiSpec }) {\n const handleQualtrics = () => {\n if (typeof PAYPAL !== 'undefined' && window.PAYPAL.analytics) {\n trackEventWithData(fptiSpec, { step: currentStep });\n\n window.PAYPAL.analytics.reloadQualtrics(\n 'donatenodeweb-merchant-qualtrics'\n );\n }\n };\n\n return (\n \n \n \n {buttonFeedback}\n \n \n );\n}\n\nDonateButtonFeedback.propTypes = {\n currentStep: PropTypes.number,\n fptiSpec: PropTypes.object,\n};\n\nexport default DonateButtonFeedback;\n","import _get from 'lodash/get';\nimport _find from 'lodash/find';\nimport _findKey from 'lodash/findKey';\nimport _each from 'lodash/each';\nimport _isEmpty from 'lodash/isEmpty';\nimport { getDonateButtonImageUrl } from '../utils/buttonImage';\nimport {\n getSupportedVariables,\n getUnsupportedVariables,\n formatVariablesForTextArea,\n parseTextAreaValue,\n} from './extraVariables';\nimport _includes from 'lodash/includes';\nimport { isLoggedInUser } from '../utils/authUtils';\nimport { formatAmountFromServer, normalizeNumber } from '../utils/amountUtils';\nimport {\n LOGO_TARGET_NOLOGO,\n LOGO_TARGET_BUTTON,\n LOGO_TARGET_PROFILE,\n} from '../reducers/reducerButtonFactory';\nimport isEmpty from 'lodash/isEmpty';\nimport templateData from '../../utility/getTemplateData';\nimport { getServerProps } from '../utils/serverProps';\n\nexport const ACCOUNT_IDENTIFIER_TYPES = {\n MERCHANT_ACCOUNT_ID: 'merchantAccountId',\n EMAIL_ADDRESS: 'emailAddress',\n};\n\n// All supported server button props\nexport const SERVER_BUTTON = {\n AMOUNT_OPTIONS: 'amount_options',\n AMOUNT_TYPE: 'amount_type',\n AMOUNT: 'amount',\n BN: 'bn',\n BTN_CODE_TYPE: 'btn_code_type',\n BUSINESS: 'business',\n BUTTON_IMAGE_URL: 'button_image_url',\n BUTTON_IMAGE: 'button_image',\n BUTTON_NAME: 'button_name',\n BUTTON_VARIABLES: 'button_variables',\n CANCEL_RETURN: 'cancel_return',\n CN: 'cn',\n CODE: 'code',\n COUNTRY_CODE: 'country_code',\n COVER_FEES_OPTION: 'donor_covers_fees',\n CURRENCY_CODE: 'currency_code',\n DONATE_CONTEXT: 'donate_context',\n EMAIL_CODE: 'email_code',\n FLOW_TYPE: 'int_type',\n ID: 'id',\n IMAGE_BANNER: 'banner_url',\n ITEM_NAME: 'item_name',\n ITEM_NUMBER: 'item_number',\n LANGUAGE: 'language',\n LC: 'lc',\n LOGO_TARGET: 'logo_target',\n LOGO_URL: 'cpp_header_image',\n NO_NOTE: 'no_note',\n NO_RECURRING: 'no_recurring',\n NO_SHIPPING: 'no_shipping',\n PROGRAMNAMES: 'program_names',\n RECURRING_OPTION: 'recurring_option',\n RETURN: 'return',\n SUBTYPE: 'sub_type',\n TYPE: 'type',\n VERSION: 'version',\n WEBSITE_CODE: 'website_code',\n};\n\n// All supported client button props\nexport const CLIENT_BUTTON = {\n ACCOUNT_IDENTIFIER_TYPE: 'accountIdentifierType',\n AMOUNT_TYPE: 'amountType',\n AMOUNT: 'amountValue',\n BN: 'bn',\n BTN_CODE_TYPE: 'useFullPageExperience',\n BTN_SIZE: 'buttonSize',\n BUSINESS: 'business',\n BUSINESS_PROFILE_LOGO_URL: 'businessProfileLogoUrl',\n BUTTON_IMAGE_URL: 'buttonImageUrl',\n BUTTON_IMAGE: 'buttonImage',\n BUTTON_NAME: 'buttonName',\n BUTTON_VARIABLES: 'extraVariablesView',\n CANCEL_RETURN: 'cancelReturn',\n CODE: 'code',\n COUNTRY_CODE: 'countryCode',\n COVER_FEES_OPTION: 'coverFeesEnabled',\n CURRENCY_CODE: 'currencyCode',\n FLOW_TYPE: 'flowType',\n ID: 'id',\n IMAGE_BANNER: 'bannerImageUrl',\n ITEM_NAME: 'purpose',\n ITEM_NUMBER: 'itemNumber',\n LANGUAGE: 'language',\n LC: 'lc',\n LISTPROGRAMS: 'listPrograms',\n LOGO_TARGET: 'logoTarget',\n LOGO_URL: 'logoUrl',\n MERCHANT_AMOUNT_1: 'merchantAmount1',\n MERCHANT_AMOUNT_2: 'merchantAmount2',\n MERCHANT_AMOUNT_3: 'merchantAmount3',\n NO_ADVANCED_VARIABLES: 'noAdvancedVariables',\n NO_BANNER_IMAGE: 'noBannerImage',\n NO_CANCEL_RETURN: 'noCancelReturn',\n NO_NOTE: 'noNote',\n NO_SHIPPING: 'noShipping',\n NOTE_LABEL: 'noteLabel',\n ORGANIZATION_NAME: 'organizationName',\n PROGRAMINPUT: 'programInput',\n PROGRAMNAMES: 'programNames',\n PURPOSE: 'purpose',\n RECEIVER_CURRENCY: 'receiverCurrency',\n RECURRING_OPTION: 'recurringEnabled',\n RETURN: 'return',\n NO_LOGO_URL: 'noLogoImage',\n PAYMENT_SETTINGS_LOGO_URL: 'paymentSettingsLogoUrl',\n SHOW_ACCEPTED_CARD_LOGOS: 'showAcceptedCardLogos',\n TYPE: 'type',\n USE_PAYPAL_BUTTON_STYLE: 'usePaypalButtonStyle',\n VERSION: 'version',\n};\n\n/**\n * Gets value of a button property in the button_variables array\n * @param {Object} button Button object(server format)\n * @param {String} property Property to get\n * @return {String} Value of the property\n */\nexport function getButtonVariable(button, property) {\n const buttonVar = _find(button.button_variables, (buttonVariable) => {\n return buttonVariable.name === property;\n });\n\n return _get(buttonVar, 'value');\n}\n\n/**\n * Adds button variable to the button_variables array\n * @param {Object} clientFormat Button object(client format)\n * @param {String} clientKey Client property\n * @param {Object} serverFormat Button object(server format)\n * @param {String} serverKey Server property\n */\nfunction addButtonVariable(clientFormat, clientKey, serverFormat, serverKey) {\n if (clientFormat[clientKey] !== undefined) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: serverKey,\n value: clientFormat[clientKey],\n });\n }\n}\n\n/**\n * Returns true if accepted card logos should be displayed\n */\nexport const shouldShowAcceptedCardLogos = (button) => {\n return !!/CC_/.test(button.button_image_url); // eslint-disable-line\n};\n\nconst buttonSizeMap = {\n sm: 'small',\n md: 'medium',\n lg: 'large',\n};\n\n/**\n * Gets button size\n * @param {Object} button Button\n * @return {String} Size of the button ('small' or 'large')\n */\nexport const getButtonSize = (button) => {\n const size = /_(\\D{2})\\.gif/.exec(button.button_image_url); // eslint-disable-line\n if (size && size.length) {\n return buttonSizeMap[size[1].toLowerCase()];\n }\n\n // Default to 'small' ?\n return 'small';\n};\n\n/**\n * Gets button image and button image url\n */\nexport const getButtonImageAndUrl = (\n buttonSize,\n showAcceptedCardLogos,\n locale,\n country\n) => {\n const buttonImageUrl = getDonateButtonImageUrl(\n buttonSize,\n showAcceptedCardLogos,\n locale,\n country\n );\n let buttonImage = 'REG';\n if (showAcceptedCardLogos) {\n buttonImage = 'CC';\n }\n\n if (buttonSize === 'small') {\n buttonImage = 'SML';\n }\n\n return {\n button_image: buttonImage,\n button_image_url: buttonImageUrl,\n };\n};\n\n/**\n * Returns true if its a Paypal button\n */\nexport const shouldUsePayPalButtonStyle = (button) => {\n const buttonImageUrl = button.button_image_url || '';\n if (buttonImageUrl.length) {\n if (\n buttonImageUrl.includes('btn_donate') &&\n buttonImageUrl.includes(templateData.cdnHostName)\n ) {\n return 'yes';\n }\n }\n\n return 'no';\n};\n\nexport const getAccountIdentifierType = (value) => {\n // Is this an email address or encrypted_account_number\n if (value && value.indexOf('@') !== -1) {\n return ACCOUNT_IDENTIFIER_TYPES.EMAIL_ADDRESS;\n }\n return ACCOUNT_IDENTIFIER_TYPES.MERCHANT_ACCOUNT_ID;\n};\n\nexport const getAccountIdentifierValue = (isServerToClient, serverFormat) => {\n const isLoggedIn = isLoggedInUser({ authState: getServerProps().authState });\n const accountIdentifier = getServerProps().accountIdentifier;\n\n if (!isLoggedIn) {\n return getButtonVariable(serverFormat, SERVER_BUTTON.BUSINESS);\n }\n\n if (isServerToClient) {\n return getButtonVariable(serverFormat, SERVER_BUTTON.BUSINESS);\n }\n\n return _get(accountIdentifier, 'encrypted_account_number');\n};\n\nexport const getLogoUrlFieldValues = (serverFormatButton) => {\n const businessProfileLogoUrl = serverFormatButton?.businessImageUrls?.url;\n let paymentSettingsLogoUrl = '';\n\n // Set logo values for clientSide\n let logoUrl = getButtonVariable(serverFormatButton, SERVER_BUTTON.LOGO_URL);\n\n let logoTarget = getButtonVariable(\n serverFormatButton,\n SERVER_BUTTON.LOGO_TARGET\n );\n\n const version = getButtonVariable(serverFormatButton, SERVER_BUTTON.VERSION);\n let noLogoImage = 'yes';\n switch (logoTarget) {\n case LOGO_TARGET_PROFILE:\n if (_isEmpty(version)) {\n paymentSettingsLogoUrl =\n serverFormatButton?.merchantExperienceUrls?.logoUrl;\n }\n noLogoImage = 'no';\n break;\n case LOGO_TARGET_BUTTON:\n noLogoImage = 'no';\n break;\n case LOGO_TARGET_NOLOGO:\n noLogoImage = 'yes';\n break;\n default:\n if (!_isEmpty(logoUrl)) {\n logoTarget = LOGO_TARGET_BUTTON;\n } else {\n logoTarget = LOGO_TARGET_PROFILE;\n }\n noLogoImage = 'no';\n\n break;\n }\n\n return {\n logoTarget,\n logoUrl,\n businessProfileLogoUrl,\n paymentSettingsLogoUrl,\n noLogoImage,\n };\n};\n\nexport const checkIfOldButton = (serverFormat) => {\n return _isEmpty(serverFormat[SERVER_BUTTON.DONATE_CONTEXT]);\n};\n\nexport const getRecurringOption = (serverFormat) => {\n const isOldButton = checkIfOldButton(serverFormat);\n const noRecurring = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.NO_RECURRING\n );\n\n if (isOldButton && _isEmpty(noRecurring)) {\n const amountValue = getButtonVariable(serverFormat, SERVER_BUTTON.AMOUNT);\n // for button with fixed amount, default to false.\n return amountValue > 0 ? 'false' : 'true';\n }\n\n if (noRecurring === '0') {\n return 'true';\n } else if (noRecurring === '1') {\n return 'false';\n }\n\n return serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.RECURRING_OPTION\n ];\n};\n\n/**\n * Transform button from server format to client format\n */\nexport const transformServerFormatToClient = (serverFormat) => {\n const clientFormat = {};\n\n if (serverFormat.id) {\n clientFormat.id = serverFormat.id;\n }\n\n // Top level variables\n clientFormat[CLIENT_BUTTON.BUTTON_IMAGE] =\n serverFormat[SERVER_BUTTON.BUTTON_IMAGE];\n clientFormat[CLIENT_BUTTON.BUTTON_IMAGE_URL] =\n serverFormat[SERVER_BUTTON.BUTTON_IMAGE_URL];\n\n // variables from the button_variables array\n const noShipping = getButtonVariable(serverFormat, SERVER_BUTTON.NO_SHIPPING);\n clientFormat[CLIENT_BUTTON.NO_SHIPPING] = noShipping === '0' ? 'no' : 'yes';\n\n const noNote = getButtonVariable(serverFormat, SERVER_BUTTON.NO_NOTE);\n clientFormat[CLIENT_BUTTON.NO_NOTE] = noNote === '0' ? 'no' : 'yes';\n clientFormat[CLIENT_BUTTON.NOTE_LABEL] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.CN\n );\n\n const useFullPageExperience = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.BTN_CODE_TYPE\n );\n clientFormat[CLIENT_BUTTON.BTN_CODE_TYPE] =\n useFullPageExperience === 'S' ? 'no' : 'yes';\n const bannerImageUrl = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.IMAGE_BANNER\n );\n clientFormat[CLIENT_BUTTON.NO_BANNER_IMAGE] = !_isEmpty(bannerImageUrl)\n ? 'no'\n : 'yes';\n clientFormat[CLIENT_BUTTON.IMAGE_BANNER] = bannerImageUrl;\n\n clientFormat[CLIENT_BUTTON.RECEIVER_CURRENCY] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.CURRENCY_CODE\n );\n clientFormat[CLIENT_BUTTON.CANCEL_RETURN] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.CANCEL_RETURN\n );\n clientFormat[CLIENT_BUTTON.RETURN] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.RETURN\n );\n clientFormat[CLIENT_BUTTON.NO_CANCEL_RETURN] =\n !isEmpty(clientFormat[CLIENT_BUTTON.CANCEL_RETURN]) ||\n !isEmpty(clientFormat[CLIENT_BUTTON.RETURN])\n ? 'no'\n : 'yes';\n clientFormat[CLIENT_BUTTON.PURPOSE] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NAME\n );\n clientFormat[CLIENT_BUTTON.ITEM_NUMBER] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.COVER_FEES_OPTION\n );\n clientFormat[CLIENT_BUTTON.BUTTON_NAME] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.BUTTON_NAME\n );\n clientFormat[CLIENT_BUTTON.FLOW_TYPE] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.FLOW_TYPE\n );\n clientFormat[CLIENT_BUTTON.ACCOUNT_IDENTIFIER_TYPE] =\n getAccountIdentifierType(\n getButtonVariable(serverFormat, SERVER_BUTTON.BUSINESS)\n );\n clientFormat[CLIENT_BUTTON.BUSINESS] = getAccountIdentifierValue(\n true,\n serverFormat\n );\n\n const countryCode = serverFormat[SERVER_BUTTON.COUNTRY_CODE];\n clientFormat[CLIENT_BUTTON.COUNTRY_CODE] = countryCode;\n clientFormat[CLIENT_BUTTON.LANGUAGE] = serverFormat[SERVER_BUTTON.LANGUAGE];\n\n // Derived variables\n clientFormat[CLIENT_BUTTON.USE_PAYPAL_BUTTON_STYLE] =\n shouldUsePayPalButtonStyle(serverFormat);\n clientFormat[CLIENT_BUTTON.SHOW_ACCEPTED_CARD_LOGOS] =\n shouldShowAcceptedCardLogos(serverFormat);\n clientFormat[CLIENT_BUTTON.BTN_SIZE] = getButtonSize(serverFormat);\n\n const logoFieldValues = getLogoUrlFieldValues(serverFormat);\n clientFormat[CLIENT_BUTTON.LOGO_URL] = logoFieldValues.logoUrl;\n clientFormat[CLIENT_BUTTON.LOGO_TARGET] =\n getButtonVariable(serverFormat, SERVER_BUTTON.LOGO_TARGET) ||\n logoFieldValues.logoTarget;\n clientFormat[CLIENT_BUTTON.PAYMENT_SETTINGS_LOGO_URL] =\n logoFieldValues.paymentSettingsLogoUrl;\n clientFormat[CLIENT_BUTTON.BUSINESS_PROFILE_LOGO_URL] =\n logoFieldValues.businessProfileLogoUrl;\n clientFormat[CLIENT_BUTTON.NO_LOGO_URL] = logoFieldValues.noLogoImage;\n\n const supportedVariables = getSupportedVariables(\n serverFormat.button_variables\n );\n clientFormat.extraVariablesView =\n formatVariablesForTextArea(supportedVariables);\n clientFormat.noAdvancedVariables = isEmpty(clientFormat.extraVariablesView)\n ? 'yes'\n : 'no';\n\n const unsupportedVariables = getUnsupportedVariables(\n serverFormat.button_variables\n );\n clientFormat.unsupportedVariables = unsupportedVariables;\n\n const amount = getButtonVariable(serverFormat, SERVER_BUTTON.AMOUNT);\n const currency = clientFormat[CLIENT_BUTTON.RECEIVER_CURRENCY];\n\n if (amount !== undefined) {\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = 'fixed';\n clientFormat[CLIENT_BUTTON.AMOUNT] = formatAmountFromServer(\n amount,\n currency\n );\n } else {\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = 'variable';\n }\n\n const coverFees = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.COVER_FEES_OPTION\n );\n clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION] =\n coverFees === 'true' ? 'yes' : 'no';\n\n const recurringOption = getRecurringOption(serverFormat);\n clientFormat[CLIENT_BUTTON.RECURRING_OPTION] =\n recurringOption === 'true' ? 'yes' : 'no';\n\n if (!checkIfOldButton(serverFormat)) {\n // For 'fixed' amounttype, do not read from 'donate_context'\n if (clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] !== 'fixed') {\n let amountType =\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.AMOUNT_TYPE];\n if (!amountType) {\n amountType = 'variable';\n }\n amountType = amountType.toLowerCase();\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = amountType;\n\n if (clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] === 'merchant_recommended') {\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_1] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[0]`\n ),\n currency\n );\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_2] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[1]`\n ),\n currency\n );\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_3] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[2]`\n ),\n currency\n );\n }\n }\n\n const programNames =\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES];\n if (!_isEmpty(programNames)) {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'yes';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = programNames;\n\n for (let i = 0; i < programNames.length; i++) {\n clientFormat[`${CLIENT_BUTTON.PROGRAMINPUT}${i}`] = programNames[i];\n }\n } else {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'no';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = [];\n }\n }\n\n // case: 'NEW PROGRAMS'\n // If it is V1 button, convert V1Program to V2Program\n // If it is V2 button, nothing to convert\n if (checkIfOldButton(serverFormat)) {\n const v0Program = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n if (v0Program) {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'yes';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = [v0Program];\n }\n }\n\n // version\n clientFormat[CLIENT_BUTTON.VERSION] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.VERSION\n );\n\n return clientFormat;\n};\n\n/**\n * Transform button from client format to server format\n */\nexport const transformClientFormatToServer = (clientFormat) => {\n let serverFormat = {};\n\n if (clientFormat.id) {\n serverFormat[SERVER_BUTTON.ID] = clientFormat.id;\n }\n\n const isLoggedIn = isLoggedInUser({ authState: getServerProps().authState });\n const isHosted = _includes(\n ['BUSINESS', 'PREMIER'],\n getServerProps().userType\n );\n const isMerchantIdEnabled = _includes(\n ['BUSINESS', 'PREMIER', 'PERSONAL'],\n getServerProps().userType\n );\n const isProgramEnabled = getServerProps().enableProgram;\n const isMerchantPresetAmountEnabled =\n getServerProps().enableMerchantPresetAmount;\n const isRecurringEnabled = getServerProps().enableRecurring;\n serverFormat[SERVER_BUTTON.COUNTRY_CODE] = clientFormat.countryCode;\n serverFormat[SERVER_BUTTON.TYPE] = 'DONATE';\n serverFormat[SERVER_BUTTON.SUBTYPE] = 'PRODUCTS';\n serverFormat[SERVER_BUTTON.LANGUAGE] = clientFormat.language;\n\n // Create array of `button_variables`\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES] = [];\n\n // btn_code_type\n const useFullPageExperience = clientFormat[CLIENT_BUTTON.BTN_CODE_TYPE];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.BTN_CODE_TYPE,\n value: useFullPageExperience === 'no' ? 'S' : 'H',\n });\n\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.BUTTON_NAME,\n serverFormat,\n SERVER_BUTTON.BUTTON_NAME\n );\n\n // send the version of button creation\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.VERSION,\n serverFormat,\n SERVER_BUTTON.VERSION\n );\n\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.PURPOSE,\n serverFormat,\n SERVER_BUTTON.ITEM_NAME\n );\n\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.FLOW_TYPE,\n serverFormat,\n SERVER_BUTTON.FLOW_TYPE\n );\n\n const noCancelReturn = clientFormat.noCancelReturn === 'yes';\n if (!noCancelReturn) {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.CANCEL_RETURN,\n serverFormat,\n SERVER_BUTTON.CANCEL_RETURN\n );\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.RETURN,\n serverFormat,\n SERVER_BUTTON.RETURN\n );\n }\n\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.RECEIVER_CURRENCY,\n serverFormat,\n SERVER_BUTTON.CURRENCY_CODE\n );\n\n if (!isHosted && isRecurringEnabled) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_RECURRING,\n value: clientFormat[CLIENT_BUTTON.RECURRING_OPTION] === 'yes' ? 0 : 1,\n });\n }\n\n const noLogo = clientFormat.noLogoImage;\n if (isLoggedIn) {\n if (noLogo === 'no') {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.LOGO_TARGET,\n serverFormat,\n SERVER_BUTTON.LOGO_TARGET\n );\n } else {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.LOGO_TARGET,\n value: LOGO_TARGET_NOLOGO,\n });\n }\n }\n\n if (noLogo === 'no') {\n if (\n clientFormat.logoTarget &&\n clientFormat.logoTarget === LOGO_TARGET_BUTTON\n ) {\n if (clientFormat.logoUrl) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.LOGO_URL,\n value: clientFormat.logoUrl,\n });\n }\n }\n }\n\n // Business field\n if (isLoggedIn && isMerchantIdEnabled) {\n const accountIdentifierValue = getAccountIdentifierValue(false);\n if (accountIdentifierValue) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.BUSINESS,\n value: accountIdentifierValue,\n });\n }\n } else {\n clientFormat[CLIENT_BUTTON.BUSINESS] = (\n clientFormat[CLIENT_BUTTON.BUSINESS] || ''\n ).toLowerCase();\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.BUSINESS,\n serverFormat,\n SERVER_BUTTON.BUSINESS\n );\n }\n\n // Amount field\n const amountType = clientFormat[CLIENT_BUTTON.AMOUNT_TYPE];\n if (amountType === 'fixed' && clientFormat[CLIENT_BUTTON.AMOUNT]) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.AMOUNT,\n value: normalizeNumber(clientFormat[CLIENT_BUTTON.AMOUNT]),\n });\n }\n\n if (isHosted) {\n // Generate donate_context\n // Set `amount_type`\n if (\n isMerchantPresetAmountEnabled ||\n isRecurringEnabled ||\n isProgramEnabled\n ) {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT] = {};\n }\n\n // Create array of `amount_options`\n if (isMerchantPresetAmountEnabled && amountType !== 'fixed') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.AMOUNT_TYPE] =\n amountType.toUpperCase();\n\n if (amountType === 'merchant_recommended') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ] = [];\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_1]));\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_2]));\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_3]));\n }\n }\n\n // Recurring option\n if (isRecurringEnabled) {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.RECURRING_OPTION\n ] =\n clientFormat[CLIENT_BUTTON.RECURRING_OPTION] === 'yes'\n ? 'true'\n : 'false';\n }\n\n // Program Names\n if (isProgramEnabled) {\n if (clientFormat[CLIENT_BUTTON.LISTPROGRAMS] === 'yes') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES] =\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES];\n } else {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES] =\n [];\n }\n }\n }\n\n // Handle ITEM_NUMBER\n // When editing a V1 button in V2, ITEM_NUMBER has to be set to \"\"\n if (isHosted) {\n if (isProgramEnabled) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.ITEM_NUMBER,\n value: '',\n });\n } else {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.ITEM_NUMBER,\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n }\n } else {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.ITEM_NUMBER,\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n }\n\n // no_shipping field\n if (isHosted) {\n const noShipping = clientFormat[CLIENT_BUTTON.NO_SHIPPING];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_SHIPPING,\n value: noShipping === 'no' ? 0 : 1,\n });\n } else {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_SHIPPING,\n value: 1,\n });\n }\n\n if (isHosted) {\n const coverFees = clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.COVER_FEES_OPTION,\n value: coverFees === 'yes' ? 'true' : 'false',\n });\n }\n\n // no_note field\n const noNote = clientFormat[CLIENT_BUTTON.NO_NOTE];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_NOTE,\n value: noNote === 'no' ? 0 : 1,\n });\n\n // custom note label\n if (noNote === 'no') {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.CN,\n value: clientFormat[CLIENT_BUTTON.NOTE_LABEL],\n });\n }\n\n // Add button_image and button_image_url\n if (clientFormat.usePaypalButtonStyle === 'no') {\n serverFormat.button_image_url = clientFormat.buttonImageUrl;\n } else {\n const buttonImageProps = getButtonImageAndUrl(\n clientFormat.buttonSize,\n clientFormat.showAcceptedCardLogos,\n clientFormat.language,\n clientFormat.countryCode\n );\n serverFormat.button_image_url = buttonImageProps.button_image_url;\n serverFormat.button_image = buttonImageProps.button_image;\n }\n\n const noBannerImage = clientFormat.noBannerImage;\n if (noBannerImage === 'no') {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.IMAGE_BANNER,\n value: clientFormat.bannerImageUrl,\n });\n }\n\n const noAdvancedVariables = clientFormat.noAdvancedVariables === 'yes';\n if (!noAdvancedVariables && clientFormat.extraVariablesView) {\n const extraVariables = parseTextAreaValue(clientFormat.extraVariablesView);\n _each(extraVariables, (variable) => {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push(variable);\n });\n }\n\n return serverFormat;\n};\n\nexport function mapServerFieldToClientField(server_field) {\n const field = _findKey(SERVER_BUTTON, (item) => item === server_field);\n return CLIENT_BUTTON[field];\n}\n","import { normalizeNumber } from '../../../utils/amountUtils';\nimport {\n VOUCHER_TYPE_DOLLAR,\n VOUCHER_INPUT_FIXED,\n VOUCHER_TYPE_PERCENTAGE,\n VOUCHER_INPUT_PERCENTAGE,\n VOUCHER_TYPE_CUSTOM,\n VOUCHER_INPUT_CUSTOM,\n VOUCHER_MAX_CHAR_LENGTH,\n} from './voucherConstants';\nimport get from 'lodash/get';\n\nexport const isGmbFlow = (bn) => {\n return bn && bn.toLowerCase() === 'gmb';\n};\n\nexport const isGenericFlow = (bn) => {\n return !isGmbFlow(bn);\n};\n\nexport const isInputTextValid = (inputToTest) => {\n // valid if character does not matches '<' '>' - to validate against scripting\n return inputToTest.match('^[^<>]*$');\n};\n\nexport const isVoucherAmountInRange = (stringToTest, allowDecimals = true) => {\n // checks for value between 1 and 100,\n // & optionally allows for decimal numbers with up to 2 decimals\n const decimalsRegexPattern = '(\\\\.?|(\\\\.[0-9]{1,2})?)';\n const valueBetweenOand100Pattern = `^([1-9][0-9]?)${\n allowDecimals ? decimalsRegexPattern : ''\n }$|^100$`;\n const valueWithInLimit = new RegExp(valueBetweenOand100Pattern);\n // normalize number to en-US to do regex strict regex validation\n const normalizedNumber = normalizeNumber(stringToTest);\n return !isNaN(normalizedNumber) && valueWithInLimit.test(normalizedNumber);\n};\n\nexport const areVoucherDetailsComplete = (\n voucherInfo,\n selectedVoucherDetails,\n postalCodeValidationPattern,\n isZipcodeRequired\n) => {\n const { zipcode, isOnAgreement } = voucherInfo;\n const { value, details, type } = selectedVoucherDetails;\n const validZipCode = zipcode && zipcode.match(postalCodeValidationPattern);\n const validTagLine =\n value &&\n ((!isNaN(parseFloat(value, 10)) &&\n isVoucherAmountInRange(\n value,\n type === VOUCHER_TYPE_PERCENTAGE ? false : true\n )) ||\n (isNaN(parseFloat(value, 10)) && value.length < VOUCHER_MAX_CHAR_LENGTH));\n const validDetails =\n !details || (details && details.length <= VOUCHER_MAX_CHAR_LENGTH);\n return (\n validTagLine &&\n validDetails &&\n (validZipCode || !isZipcodeRequired) &&\n isOnAgreement\n );\n};\n\nexport const voucherTypeToInputTypeMapping = [\n {\n voucherType: VOUCHER_TYPE_DOLLAR,\n voucherInputType: VOUCHER_INPUT_FIXED,\n },\n {\n voucherType: VOUCHER_TYPE_PERCENTAGE,\n voucherInputType: VOUCHER_INPUT_PERCENTAGE,\n },\n {\n voucherType: VOUCHER_TYPE_CUSTOM,\n voucherInputType: VOUCHER_INPUT_CUSTOM,\n },\n];\n\nexport const getVoucherDetail = (button) => {\n const voucherAdded = !!get(button, 'offerProgram');\n if (voucherAdded) {\n const { type, value } = get(\n button,\n 'offerProgram.computation_rules[0].offer_value'\n );\n const { description: voucherDetails, sub_title: discountTagline } = get(\n button,\n 'offerProgram.localized_attributes[0]'\n );\n const voucherType = voucherTypeToInputTypeMapping.find((vType) => {\n let voucherInputType = VOUCHER_INPUT_PERCENTAGE;\n if (type !== VOUCHER_INPUT_PERCENTAGE) {\n voucherInputType =\n value === 0 ? VOUCHER_INPUT_CUSTOM : VOUCHER_INPUT_FIXED;\n }\n return vType.voucherInputType === voucherInputType;\n }).voucherType;\n let voucherValue = discountTagline;\n if (value !== 0) {\n voucherValue = type === VOUCHER_INPUT_FIXED ? value / 100 : value;\n }\n\n return {\n voucherType,\n voucherValue,\n voucherDetails,\n discountTagline,\n };\n }\n\n return {};\n};\n\nexport const getAllVoucherTypeInfo = (voucherDetail, state = {}) => {\n const { voucherType, voucherValue, voucherDetails, discountTagline } =\n voucherDetail;\n const allVoucherTypeInfo = [\n { type: VOUCHER_TYPE_DOLLAR },\n { type: VOUCHER_TYPE_PERCENTAGE },\n { type: VOUCHER_TYPE_CUSTOM },\n ];\n const typeToUpdate = voucherType || state.selectedVoucherType;\n const voucherInfoIndexToUpdate = allVoucherTypeInfo.findIndex(\n (voucherInfo) => voucherInfo?.type === typeToUpdate\n );\n const updatedVoucherInfo = allVoucherTypeInfo[voucherInfoIndexToUpdate] || {};\n if (voucherValue !== undefined) {\n updatedVoucherInfo.value = voucherValue;\n updatedVoucherInfo.tagline =\n typeToUpdate === VOUCHER_TYPE_CUSTOM ? voucherValue : discountTagline;\n }\n\n if (voucherDetails !== undefined) {\n updatedVoucherInfo.details = voucherDetails;\n }\n\n allVoucherTypeInfo.splice(voucherInfoIndexToUpdate, 1, updatedVoucherInfo);\n\n return allVoucherTypeInfo;\n};\n","import _get from 'lodash/get';\nimport { AUTH_STATE_LOGGEDIN } from '../clientConstants';\nimport getStore from '../store/configureStore';\n\nexport function isLoggedInUser(applicationState) {\n if (applicationState) {\n return _get(applicationState, 'authState') === AUTH_STATE_LOGGEDIN;\n }\n\n const reduxStore = getStore();\n return (\n _get(reduxStore.getState(), 'application.authState') === AUTH_STATE_LOGGEDIN\n );\n}\n\nexport function getUserType() {\n const reduxStore = getStore();\n return _get(reduxStore.getState(), 'application.userType');\n}\n","// fpti page/link names\nexport const BUTTON_DELETED = 'button_deleted';\nexport const BUTTON_MANAGER = 'button_manager';\nexport const BACK_TO_MANAGE_LINK = 'back_to_manage_link';\nexport const BUTTON_OVERVIEW = 'button_overview';\nexport const CLOSE = 'close';\nexport const KEEP_THIS_BUTTON_LINK = 'keep_this_button_link';\nexport const GO_BACK_BUTTON = 'go_back_button';\nexport const CLOSE_PREVIEW = 'close_preview';\nexport const COPY_CODE_LINK = 'copy_code_link';\nexport const COPY_LINK = 'copy_link';\nexport const DELETE_DONATE_LINK = 'delete_donate_link';\nexport const DELETE_DONATE_LINK_ALERT = 'delete_donate_link_alert';\nexport const DELETE_DONATE_LINK_ERROR = 'delete_donate_link_error';\nexport const DOWNLOAD_QR_LINK = 'download_qr_link';\nexport const DUPLICATE_DONATE_LINK = 'duplicate_donate_link';\nexport const EDIT_DONATE_LINK = 'edit_donate_link';\nexport const ENTRY_POINT_HAWK = 'hawk_homepage';\nexport const ENTRY_POINT_DIRECT = 'direct';\nexport const LOGIN_LINK = 'login_link';\nexport const MANAGE_BUTTON_LINK = 'manage_button_link';\nexport const MANAGE_PAGE_LOGIN = 'manage_page_login';\nexport const MANAGE_VOUCHER_LINK = 'manage_voucher_link';\nexport const OPEN_PREVIEW_LINK = 'open_preview_link';\nexport const OVERVIEW_PAGE_LOGIN_TILE = 'overview_page_login_tile';\nexport const ADVANCED_DONATE_BUTTON_EXPERIENCE_LINK =\n 'advanced_donate_button_experience_link';\nexport const PARTNER_DONATE_LINK = 'partner_donate_link';\nexport const QUICK_DONATE_LINK = 'quick_donate_link';\nexport const CUSTOM_DONATE_LINK = 'custom_donate_link';\n// error code\nexport const UNAUTHORIZED = 'UNAUTHORIZED';\nexport const INVALID_BUTTON = 'INVALID_HOSTED_BUTTON_ID';\n\nexport const AMOUNT_OPTIONS = {\n AMOUNT_TYPE_FIXED: 'fixed',\n AMOUNT_TYPE_VARIABLE: 'variable',\n AMOUNT_TYPE_PRESET: 'merchant_recommended',\n};\n","import _get from 'lodash/get';\nimport { KILOBYTE, MEGABYTE } from '../../utility/constants';\nimport { formatNumberDecimals } from './amountUtils';\n\n/**\n * Griffin recommended setTitleCase method\n * https://github.paypal.com/pages/Globalization-R/griffin-paypal/docs/faq.html#how-can-i-generate-a-language-dropdown-for-a-country\n */\nexport function setTitleCase(str) {\n return str.replace(/(\\S*)/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n}\n\n// return if user is on mobile\nexport function isMobile() {\n const serverProps = document.getElementById('server-props');\n const serverPropsData = (serverProps && serverProps.innerHTML) || '{}';\n try {\n return _get(JSON.parse(serverPropsData), 'isMobile');\n } catch (err) {\n console.warn(err);\n }\n return false;\n}\n\n/**\n * Truncates text on after the desired number of characters and adds ellipsis at the end\n * @param {string} str - the string to truncate\n * @param {number} charNum - char index at which to start truncating text\n */\nexport function truncatesAtChar(str = '', charNum = 1) {\n const trunStr = str.substring(0, charNum).trim();\n\n return trunStr.concat('...');\n}\n\nexport function getImageSize(fileSize, messages) {\n const size = fileSize > MEGABYTE ? fileSize / MEGABYTE : fileSize / KILOBYTE;\n const type = fileSize > MEGABYTE ? messages.megabyte : messages.kilobyte;\n\n return {\n size: formatNumberDecimals(size),\n type,\n };\n}\n","import React from 'react';\nimport getLocaleMessages from '../../../../utils/localesMessages';\nimport { Checkbox } from '@paypalcorp/pp-react-checkbox';\n\nconst { rp: { recurring_label } = {} } = getLocaleMessages(\n 'buttonsV3/recurringCheckbox'\n);\n\nconst RecurringCheckbox = () => {\n return (\n \n );\n};\n\nexport default RecurringCheckbox;\n","if (window.webpackPublicPath) {\n __webpack_public_path__ = window.webpackPublicPath; // eslint-disable-line no-undef\n}\n","import templateData from './getTemplateData';\nimport { isExternalFlow } from './externalIntegrationUtils';\nimport _get from 'lodash/get';\n\nexport function isInContext() {\n return isPopupMode();\n}\n\nexport function onComplete(postBackData) {\n const data = _get(postBackData, 'postBackData') || {};\n\n const transactionDetails = {\n tx: data.txn_id,\n st: data.payment_status,\n amt: data.mc_gross,\n cc: data.mc_currency,\n cm: data.custom_data,\n item_number: data.item_number,\n item_name: data.item_name,\n };\n // Add token if it is an external flow\n // so that they can call the GET TOKEN API\n if (isExternalFlow()) {\n transactionDetails.token = templateData.token;\n }\n if (window && window.xprops && window.xprops.onComplete) {\n window.xprops.onComplete({\n ...transactionDetails,\n });\n }\n}\n\nexport function onCancel(redirectUrl) {\n if (window && window.xprops && window.xprops.onCancel) {\n window.xprops.onCancel({\n redirectUrl,\n });\n }\n}\n\nexport function closeWindow() {\n if (window && window.xprops && window.xprops.close) {\n window.xprops.close();\n }\n}\n\n/**\n * Returns true if Donate is being rendered inside an iframe\n */\nexport function isIframeMode() {\n return window.parent !== window;\n}\n\nexport function isSdkMode() {\n return Boolean(templateData.sdkMeta || templateData.targetMeta);\n}\n\n/**\n * Returns true if window was opened by window.opener such as for pop-up windows.\n *\n */\nexport function isPopupMode() {\n return isSdkMode() && Boolean(window.opener);\n}\n/**\n * We are in SDK Mode but we do not have window.xprops so this is FullPageRedirection Mode\n */\nexport function isFullPageRedirectionMode() {\n return isSdkMode() && Boolean(!window.xprops);\n}\n\nexport function isMobileOrInContext() {\n return isPopupMode() || templateData.ismobile || templateData.istablet;\n}\n\nexport function isMobileOrTablet() {\n return templateData.ismobile || templateData.istablet;\n}\n\nexport function isMWebNoCancelURL() {\n return !isInContext() && isMobileOrTablet() && !templateData.charityCancelUrl;\n}\n\nexport function isMWebNoReturnURL() {\n return !isInContext() && isMobileOrTablet() && !templateData.charityReturnUrl;\n}\n\nexport function isNotFullScreen() {\n var isNotAtMaxWidth = window.screen.availWidth - window.outerWidth > 0;\n var isNotAtMaxHeight = window.screen.availHeight - window.outerHeight > 0;\n var isNotAtFullScreen = isNotAtMaxHeight && isNotAtMaxWidth;\n return isNotAtFullScreen;\n}\n","export function getParameterByName(name, url) {\n if (!url) {\n url = window.location.href;\n }\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n\n const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nexport function getParameterByNameFromURL(name, url) {\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n\n const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);\n const results = regex.exec(url);\n\n if (!results) {\n return null;\n }\n\n if (!results[2]) {\n return '';\n }\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nexport function getValuesFromULState(keys, url) {\n let queryStringObj = {};\n keys.forEach((key) => {\n queryStringObj[key] = getParameterByName(key, url);\n });\n return queryStringObj;\n}\n\nexport function getParametersFromUrl(url) {\n if (!url) {\n url = window.location.href;\n }\n\n if (url.indexOf('?') >= 0) {\n let queryString = /[^?]*$/.exec(url)[0]; // eslint-disable-line\n return JSON.parse(\n '{\"' +\n decodeURI(queryString)\n .replace(/\"/g, '\\\\\"')\n .replace(/&/g, '\",\"')\n .replace(new RegExp('=', 'g'), '\":\"') +\n '\"}'\n );\n }\n return {};\n}\n","import * as AppActions from '../actions/AppActions';\nimport '../stores/AppStore';\nimport { formatAmount, formatCurrency, normalizeNumber } from './formator';\nimport _map from 'lodash/map';\nimport _get from 'lodash/get';\nimport _set from 'lodash/set';\nimport _isEmpty from 'lodash/isEmpty';\nimport { init } from 'pp-react-l10n';\nimport { getPersonalizedMessagesAsContentLoaderStandard } from './personalizedMessages';\n\nconst rawTemplateData =\n document.getElementById('templateData') &&\n document.getElementById('templateData').innerHTML;\nconst templateData = JSON.parse(rawTemplateData ? rawTemplateData : '{}');\n\nif (!_isEmpty(templateData)) {\n if (!_isEmpty(templateData.giftAid)) {\n _set(templateData, 'giftAid', JSON.parse(templateData.giftAid));\n }\n if (!_isEmpty(templateData.webscrData)) {\n _set(templateData, 'webscrData', JSON.parse(templateData.webscrData));\n }\n if (!_isEmpty(templateData.giftAidAddress)) {\n _set(\n templateData,\n 'giftAidAddress',\n JSON.parse(templateData.giftAidAddress)\n );\n }\n}\n\nconst localsMessagesNode =\n document.getElementById('localeMessages') &&\n document.getElementById('localeMessages').innerHTML;\nconst locals = (localsMessagesNode && JSON.parse(localsMessagesNode)) || {};\nconst personalized = getPersonalizedMessagesAsContentLoaderStandard();\nconst content = {\n locals,\n personalized,\n};\ninit({ content });\n\n/**\n * Normalize charity name and donation ID strings from template data.\n */\nif (templateData.charityName) {\n const charityName = templateData.charityName;\n try {\n templateData.charityName = decodeURIComponent(charityName);\n } catch (er) {\n templateData.charityName = charityName;\n }\n}\nif (templateData.donationId) {\n const donationId = templateData.donationId;\n try {\n templateData.donationId = decodeURIComponent(donationId);\n } catch (er) {\n templateData.donationId = donationId;\n }\n}\n\nexport const shouldSelectPresetAmount = (amount) => {\n if (!amount) {\n return false;\n }\n\n const presetAmounts = templateData.presetAmounts || [];\n return presetAmounts.map(Number).includes(normalizeNumber(amount));\n};\n\n/**\n * Attempting update default value for amount in flux store\n */\nconst donorCoversFee = templateData.feePayer === 'consumer';\nconst donationAmount = donorCoversFee\n ? normalizeNumber(templateData.rawAmount.toString())\n : templateData.donationAmount.toString();\nAppActions.changeAmount({\n amount: formatCurrency({\n value: donationAmount,\n currency: templateData.donationCode,\n }),\n});\n\nif (donorCoversFee) {\n AppActions.changeCoverFee({ coverFee: 'checked' });\n AppActions.changeFeeAmount({ feeAmount: templateData.feeAmount });\n AppActions.changeFormatedAmount({\n formatedFeeAmount: formatAmount({\n currency: templateData.feeCurr,\n value: templateData.rawAmount,\n }),\n });\n}\n\nif (templateData.anonymousEnabled) {\n const anonymousStatus = templateData.anonymousStatus\n ? 'checked'\n : 'unchecked';\n AppActions.changeAnonymousStatus({ anonymousStatus });\n}\n\n/**\n * Attempting update default value for currency symbol in flux store\n */\nAppActions.changeSymbol({\n symbol: templateData.donationSymbol,\n});\n\n/**\n * Attempting update default value for currency code in flux store\n */\nAppActions.changeCode({\n code: templateData.donationCode,\n});\n\n/**\n * Attempting update default value for note in flux store\n */\nAppActions.changeNote({\n note: templateData.donationNote,\n});\n\nAppActions.updateSelectedPresetButtonId(templateData.selectedPresetButtonId);\n\ntemplateData.enablePresetAmounts = shouldEnablePresetAmounts();\n\nif (_isEmpty(templateData.presetAmounts)) {\n templateData.presetAmounts = _get(\n templateData,\n 'donateContext.amount_options'\n );\n}\n\nif (templateData.donationAmountType === 'preset') {\n if (!_isEmpty(donationAmount) && !shouldSelectPresetAmount(donationAmount)) {\n AppActions.updateDonationAmountType('userinput');\n } else {\n AppActions.updateDonationAmountType('preset');\n }\n}\n\nexport const isOldButtonFactory = () => {\n return _isEmpty(templateData.donateContext);\n};\n\nexport const isNewButtonFactory = () => {\n return !isOldButtonFactory();\n};\n\n// Prepopulate donationId in the dropdown\nif (isNewButtonFactory() && templateData.donationId) {\n AppActions.updateSelectedProgram(templateData.donationId);\n}\n\n/**\n * Attempting to parse all locals messages from DOM\n */\nfunction parseMessages(templateName) {\n if (!templateName) {\n console.warn('Missing template name');\n }\n try {\n const localsAllMessages = JSON.parse(\n document.getElementById('localeMessages').innerHTML || {}\n );\n return localsAllMessages[templateName] || localsAllMessages;\n } catch (e) {\n console.warn('Please attach locales to DOM');\n return {};\n }\n}\n\n/**\n * Attempting to get all data from template\n */\nexport default templateData;\n\n/**\n * Attempting to grab all locals messages\n */\nexport function localsMessages(templateName) {\n return parseMessages(templateName);\n}\n\n/**\n * Attempting to grab all locals messages for guest billing page\n */\nexport function guestLocalsMessages() {\n const guestMessages = localsMessages('guest/guestForm') || {};\n const guestsignup = guestMessages.guestsignup || {};\n const passwordWarnings = guestMessages.passwordWarnings || {};\n const cpfWarnings = guestMessages.cpfWarnings || {};\n let nationalIds = [];\n\n try {\n nationalIds = _map(guestsignup.nationalIds, (label, value) => {\n return {\n label,\n value,\n };\n });\n } catch (e) {\n /* nothing required as nationalIds are only applicable for limited countries */\n }\n\n const createAccountPreProps = {\n mainTitle: '', // guestsignup.mainTitle\n mainBlurb: '', // guestsignup.mainBlurb\n itsFreeLine: '', // guestsignup.itsFreeLine\n mainTitle2: guestsignup.mainTitle2,\n createAccountCheckboxContent: guestsignup.createAccountCheckboxContent,\n createAccountHelp1: guestsignup.expcreateAccountHelpContent,\n label1: guestsignup.explabel1,\n label2: guestsignup.explabel2,\n legalBlurbHTML: guestsignup.legalBlurbHTML,\n legalBlurbWithFeeInformationDoc:\n guestsignup.legalBlurbWithFeeInformationDoc,\n incentive: guestsignup.incentive,\n\n labeldob: guestsignup.labeldob,\n labelnationality: guestsignup.labelnationality,\n dobPattern: guestsignup.dobPattern,\n dobHelp: guestsignup.dobPattern && guestsignup.dobPattern.toUpperCase(),\n labelocc: guestsignup.labelocc,\n legalOnlyHTML: guestsignup.legalOnlyHTML,\n consentBlurbHTML: guestsignup.consentBlurbHTML,\n labelNationalIdType: guestsignup.labelNationalIdType,\n labelNationalIdNumber: guestsignup.labelNationalIdNumber,\n nationalIds,\n defaultIdType: 'NATIONAL_ID', // Setting up deafult ID type\n\n passwordWarnings: {\n _MISMATCH: passwordWarnings.MISMATCH,\n _IS_NULL: passwordWarnings.IS_NULL,\n _TOO_SHORT: passwordWarnings.TOO_SHORT,\n _TOO_LONG: passwordWarnings.TOO_LONG,\n _CONTAINS_REPEATED_CHARACTERS:\n passwordWarnings.CONTAINS_REPEATED_CHARACTERS,\n _CONTAINS_NUMBER_SEQUENCE: passwordWarnings.CONTAINS_NUMBER_SEQUENCE,\n _CONTAINS_LETTER_SEQUENCE: passwordWarnings.CONTAINS_LETTER_SEQUENCE,\n _CONTAINS_NUMBER_LETTER_SEQUENCE:\n passwordWarnings.CONTAINS_NUMBER_LETTER_SEQUENCE,\n _IS_BLACKLISTED: passwordWarnings.IS_BLACKLISTED,\n _CONTAINS_SPACES: passwordWarnings.CONTAINS_SPACES,\n _HAS_ILLEGAL_CHARACTERS: passwordWarnings.HAS_ILLEGAL_CHARACTERS,\n _LEGAL_CHECKBOX: passwordWarnings.LEGAL_CHECKBOX,\n _REQUIRED_DOB: passwordWarnings.REQUIRED_DOB,\n _INVALID_DOB: passwordWarnings.INVALID_DOB,\n _MUST_18_DOB: passwordWarnings.MUST_18_DOB,\n _HELP_DOB: passwordWarnings.HELP_DOB,\n _OCCUPATION: passwordWarnings.OCCUPATION,\n _NATIONALITY: passwordWarnings.NATIONALITY,\n _HINT1: passwordWarnings.HINT1,\n _HINT2: passwordWarnings.HINT2,\n _HINT3: passwordWarnings.HINT3,\n _NATIONAL_ID_TYPE: passwordWarnings._NATIONAL_ID_TYPE,\n _NATIONAL_ID_NUMBER: passwordWarnings._NATIONAL_ID_NUMBER,\n },\n };\n const createAccountPost = {\n mainTitle: '', // guestsignup.mainTitle\n mainBlurb: '', // guestsignup.mainBlurb\n itsFreeLine: '', // guestsignup.itsFreeLine\n createAccountCheckboxContent: guestsignup.createAccountCheckboxContent,\n pplogo: guestsignup.pplogo,\n mainTitle1: guestsignup.mainTitle1,\n mainTitle2: guestsignup.expmainTitle2,\n mainTitle3: guestsignup.expmainTitle3,\n notNow: guestsignup.notNow,\n label1: guestsignup.explabel1,\n label2: guestsignup.explabel2,\n legalBlurbHTML: guestsignup.legalBlurbHTML,\n legalBlurbWithFeeInformationDoc:\n guestsignup.legalBlurbWithFeeInformationDoc,\n\n labeldob: guestsignup.labeldob,\n labelnationality: guestsignup.labelnationality,\n dobPattern: guestsignup.dobPattern,\n labelocc: guestsignup.labelocc,\n legalOnlyHTML: guestsignup.legalOnlyHTML,\n consentBlurbHTML: guestsignup.consentBlurbHTML,\n\n passwordWarnings: {\n _MISMATCH: passwordWarnings.MISMATCH,\n _IS_NULL: passwordWarnings.IS_NULL,\n _TOO_SHORT: passwordWarnings.TOO_SHORT,\n _TOO_LONG: passwordWarnings.TOO_LONG,\n _CONTAINS_REPEATED_CHARACTERS:\n passwordWarnings.CONTAINS_REPEATED_CHARACTERS,\n _CONTAINS_NUMBER_SEQUENCE: passwordWarnings.CONTAINS_NUMBER_SEQUENCE,\n _CONTAINS_LETTER_SEQUENCE: passwordWarnings.CONTAINS_LETTER_SEQUENCE,\n _CONTAINS_NUMBER_LETTER_SEQUENCE:\n passwordWarnings.CONTAINS_NUMBER_LETTER_SEQUENCE,\n _IS_BLACKLISTED: passwordWarnings.IS_BLACKLISTED,\n _CONTAINS_SPACES: passwordWarnings.CONTAINS_SPACES,\n _HAS_ILLEGAL_CHARACTERS: passwordWarnings.HAS_ILLEGAL_CHARACTERS,\n _LEGAL_CHECKBOX: passwordWarnings.LEGAL_CHECKBOX,\n\n _REQUIRED_DOB: passwordWarnings.REQUIRED_DOB,\n _INVALID_DOB: passwordWarnings.INVALID_DOB,\n _OCCUPATION: passwordWarnings.OCCUPATION,\n _NATIONALITY: passwordWarnings.NATIONALITY,\n _HINT1: passwordWarnings.HINT1,\n _HINT2: passwordWarnings.HINT2,\n _HINT3: passwordWarnings.HINT3,\n },\n buttonText: guestsignup.agreeanddonate,\n };\n\n const cpf = {\n label: guestsignup.cpf,\n warnings: {\n _REQUIRED_CPF: cpfWarnings.REQUIRED_CPF,\n _INVALID_CPF: cpfWarnings.INVALID_CPF,\n },\n };\n\n return {\n guestMessages: guestMessages,\n guestLabels: guestMessages.label || {},\n guestHelp: guestMessages.help || {},\n guestCaptcha: guestMessages.captcha || {},\n createAccountPreProps: createAccountPreProps,\n createAccountPost: createAccountPost,\n cpf: cpf,\n };\n}\n\nfunction shouldEnablePresetAmounts() {\n return (\n (templateData.donationAmountType === 'preset' &&\n templateData.presetAmounts?.length === 3) ||\n (templateData.donateContext &&\n templateData.donateContext.amount_type === 'MERCHANT_RECOMMENDED' &&\n templateData.donateContext.amount_options.length === 3) ||\n false\n );\n}\n\nlet currencyLists;\nexport function getCurrencySymbol(currencyCode) {\n if (!currencyLists) {\n try {\n currencyLists = JSON.parse(\n document.getElementById('currencyLists').innerHTML || {}\n );\n } catch (e) {\n currencyLists = {};\n }\n }\n return (currencyLists.symbols && currencyLists.symbols[currencyCode]) || '';\n}\n\nexport const isMobileHeaderExp = () => {\n return _get(templateData, 'pxp.moveMobileHeaderExp.experiment', false);\n};\n\nexport const isPartnerFlow = () => {\n return _get(templateData, 'isPartnerFlow', false);\n};\n\nexport const hasPartnerSource = () => {\n return _get(templateData, 'hasPartnerSource', false);\n};\n","/**\n * Simple Client-Side Logger\n *\n * Respects the \"verbose-logger\" feature flag.\n */\n\nimport neff from 'neff';\n\n// default log function is a noop\nexport let log = () => {};\n\n// if you have \"verbose-logger\" feature enabled\n// you get logging in your console instead.\nif (neff.isEnabled('verbose-logging') && window.console) {\n log = (...args) => console.log(...args); // eslint-disable-line no-console\n}","/**\n * @fileOverview Analytics – link and error tracking\n * @name Analytics Widget\n * @author dquock, jamuferguson\n *\n * This file is a wrapper around site catalyst and fpti\n * and allows us to easily fire off tracking calls to\n * both at the same time.\n *\n * Primarily referenced in our global page handler \"global.es6\"\n */\n\nimport * as logger from '../verbose-logger';\n\n// store for later\nconst noop = () => {};\n\n// safely shadow these globals\nlet s = window.s || { t: noop, tl: noop };\nlet PAYPAL = window.PAYPAL;\n\n// NOTE: it's not safe to shadow window.fpti at the module level\n// because it gets reset after 500ms in pa.js (see: pageTracking.dust)\n\n// instantiate the view (with a backup for mocks mode)\nlet emptyAnalytics = { recordClick: noop, recordImpression: noop };\nlet analytics = PAYPAL && PAYPAL.analytics ? new PAYPAL.analytics.Analytics() : emptyAnalytics;\n\n// Start client side error tracking\nPAYPAL &&\nPAYPAL.analytics &&\nPAYPAL.analytics.startClientErrorTracking && PAYPAL.analytics.startClientErrorTracking();\n\n// can access FPTI performance info from PAYPAL.analytics.perf\n// https://dev.paypal.com/wiki/General/FPTI-PerformanceTracking\n\n/*************\n * Public API\n *************/\n\n/**\n * Simple back button tracking\n */\nexport function trackBackButton() {\n trackAction('back');\n}\n\n/**\n * Adding new data - pxp data\n */\nexport function addPxpTags(data = {}) {\n try {\n Object.assign(window.fpti, data);\n }\n catch (exception) {\n logger.log('Analytis Exception Found:', exception);\n }\n}\n\n/**\n * Wrapper around trackLink that lets us send additional FPTI keys\n * @param linkName - the link name for the trackLink call\n * @param pageGroup - the page group for the trackLink call\n * @param {String} pageName - The actual page name (prev. pageName2)\n * @param data - key value pairs we want to send to FPTI then remove\n */\nexport function trackLinkWithData(linkName, pageGroup, pageName, data, trackType) {\n let fpti = window.fpti || {};\n\n // apply extra fields to window.fpti\n Object.assign(fpti, data);\n\n trackLink(linkName, pageGroup, pageName, trackType);\n\n // remove those additional keys\n Object.keys(data).forEach((key) => {\n delete fpti[key];\n });\n}\n\n/**\n * Set FPTI/SC variables and fire page tracking beacons\n *\n * @param {String} pageGroup - The page group (prev. pageName)\n * @param {String} pageName - The actual page name (prev. pageName2)\n */\nexport function trackPage(pageGroup, pageName, custKey, custValue) {\n\n let fpti = {\n data:{}\n };\n\n logger.log('Recording analytics:', [pageGroup, pageName, custKey, custValue]);\n\n // set pageNames\n fpti.data.page = s.prop25 = s.eVar25 = pageName;\n fpti.data.pgrp = s.pageName = pageGroup;\n\tfpti.data.tmpl = pageName;\n\n\tif ( custKey && custValue){\n\t\tfpti.data[custKey] = custValue;\n\t}\n\n // clear out error props, in case they exist\n fpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = undefined; // error message\n fpti.data.erfd = fpti.data.fieldId = s.prop15 = undefined; // form field with error (field1|field2|field3)\n fpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = undefined; // error code\n fpti.data.screen = undefined;\n fpti.data.version = 'fixathon';\n fpti.data.tsrce = 'donatenodeweb';\n\n try {\n\t\tfireBeacon(fpti);\n } catch (exception) {\n logger.log('Analytis Exception Found:', exception);\n }\n}\n\n/**\n * Set FPTI/SC variables and fire page tracking beacons with data\n *\n * @param {String} pageGroup - The page group (prev. pageName)\n * @param {String} pageName - The actual page name (prev. pageName2)\n */\nexport function trackPageWithData(pageGroup, pageName, data = {}) {\n\n let fpti = {\n data: {}\n };\n\n logger.log('Recording analytics:', [pageGroup, pageName, data]);\n \n // set pageNames\n fpti.data.page = s.prop25 = s.eVar25 = pageName;\n fpti.data.pgrp = s.pageName = pageGroup;\n fpti.data.tmpl = pageName;\n \n Object.assign(fpti.data, data);\n\n // clear out error props, in case they exist\n fpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = undefined; // error message\n fpti.data.erfd = fpti.data.fieldId = s.prop15 = undefined; // form field with error (field1|field2|field3)\n fpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = undefined; // error code\n fpti.data.screen = undefined;\n fpti.data.version = 'fixathon';\n fpti.data.tsrce = 'donatenodeweb';\n\n try {\n\t\tfireBeacon(fpti);\n } catch (exception) {\n logger.log('Analytis Exception Found:', exception);\n }\n\n delete window.fpti.offer_type;\n}\n\nexport function trackErrorWithData(pageGroup, pageName, data = {}) {\n\tlet fpti = {\n\t\tdata: {}\n\t};\n\n\tlogger.log('Recording analytics:', [pageGroup, pageName, data]);\n\tconst { message, fieldId, code } = data\n\n\t// set pageNames\n\tfpti.data.page = s.prop25 = s.eVar25 = pageName;\n\tfpti.data.pgrp = s.pageName = pageGroup;\n\tfpti.data.tmpl = pageName;\n\n Object.assign(fpti.data, data);\n\n\t//set error props\n\tfpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = message; // error message\n\tfpti.data.erfd = fpti.data.fieldId = s.prop15 = fieldId; // form field with error (field1|field2|field3)\n\tfpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = code; // error code\n\tfpti.data.tsrce = 'donatenodeweb';\n fpti.data.offer_type = undefined; // this function is somehow assigning offer_type for some scenario, clear the value to be safe. \n\n\ttry {\n\t\tfireBeacon(fpti);\n\t} catch (exception) {\n\t\tlogger.log('Analytis Exception Found:', exception);\n\t}\n\n // remove those additional keys\n Object.keys(data).forEach((key) => {\n delete window.fpti[key];\n });\n}\n\n\n/**\n * Set FPTI/SC variables and fire tracking beacons\n *\n * @param {String} linkName - The name of the link\n * @param {String} pageGroup - The page group (prev. pageName)\n * @param {String} pageName - The actual page name (prev. pageName2)\n * @param {String} trackType - i.e \"link\"\n * @param {String} transactionDetailsLinks\n */\nexport function trackLink(linkName, pageGroup, pageName, trackType, transactionDetailsLinks) {\n\n let fpti = {\n data: {\n ...window.fpti,\n }\n };\n\n logger.log('Recording analytics:', [linkName, pageGroup, pageName, trackType, transactionDetailsLinks]);\n\n // set linkname\n fpti.data.link = s.prop26 = linkName;\n\n // set pageNames\n fpti.data.page = s.prop25 = s.eVar25 = pageName;\n fpti.data.pglk = s.prop27 = `${pageGroup}|${linkName}`;\n fpti.data.pgln = `${pageName}|${linkName}`;\n fpti.data.pgrp = s.pageName = pageGroup;\n\n // clear out error props, in case they exist\n fpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = undefined; // error message\n fpti.data.erfd = fpti.data.fieldId = s.prop15 = undefined; // form field with error (field1|field2|field3)\n fpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = undefined; // error code\n fpti.data.screen = undefined;\n fpti.data.version = 'fixathon';\n fpti.data.tsrce = 'donatenodeweb';\n\n if (transactionDetailsLinks) {\n // prop28 is the sc var for transaction details links when\n // selecting a transaction (link1|link2|link3)\n s.prop28 = transactionDetailsLinks;\n }\n\n try {\n switch (trackType) {\n case 'link':\n fireBeacon(fpti, s.prop26, true);\n break;\n\n default:\n fireBeacon(fpti);\n break;\n }\n } catch (exception) {\n logger.log('Analytis Exception Found:', exception);\n }\n\n // set attrs for automation\n // $('#analytics').attr('data-pagename', pageName)\n //\t.attr('data-c25', pageName2)\n //\t.attr('data-c27', s.prop27)\n //\t.attr('data-c28', s.prop28)\n //\t.attr('data-v56', s.eVar56);\n\n}\n\n/**\n * Link tracking\n * @param {Object} event - click event || the clicked jQuery object of the input used to submit a form\n * if event isn't defined or is null, explicitly specify params\n * @param {String} linkName - name attribute from the link\n * @param {String} pageGroup - data-pagename the link is going to\n * @param {String} pageName - data-pagename2 the link is going to\n * @param {String} trackType - page-level or not\n * @param {String} transactionDetailsLinks - activity transaction details links\n */\nexport function trackElement($element) {\n let linkName = $element.attr('name') || $element && $element.html();\n let pageGroup = $element.data('pagename') || s.pageName;\n let trackType = $element.data('track-type') || 'link';\n let pageName = $element.data('pagename2') || `${pageGroup}:::${trackType}`;\n let transactionDetailsLinks = $element.data('transactiondetailslinks');\n trackLink(linkName, pageGroup, pageName, trackType, transactionDetailsLinks);\n}\n\n/**\n *\tTracks errors\n *\t@param {Object} error - The object containing the props to set\n */\nexport function trackError (error) { // eslint-disable-line consumerweb/param-names\n\n let fpti = {\n data:{},\n };\n\n logger.log('Recording analytics:', error);\n\n const { message, fieldId, code } = error;\n\n // set error props\n fpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = message; // error message\n\tfpti.data.erfd = fpti.data.fieldId = s.prop15 = fieldId; // form field with error (field1|field2|field3)\n\tfpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = code; // error code\n fpti.data.tsrce = 'donatenodeweb';\n\n fireBeacon(fpti);\n\n // set attrs for automation\n // $('#analytics').attr('data-pagename', s.pageName)\n //\t.attr('data-c25', s.prop25)\n //\t.attr('data-c27', s.prop27);\n}\n\n/**\n *\tTracks link on a page\n *\tkeeps the pagenames the same, but tracks the link\n *\t@param {String} linkName linkName to track\n */\nexport function trackAction (linkName) {\n\n let fpti = {\n data:{}\n };\n\n logger.log('Recording analytics:', linkName);\n\n // set linkname\n fpti.data.link = s.prop26 = linkName;\n fpti.data.pglk = s.prop27 = `${s.pageName}|${linkName}`;\n\n // clear out error props, in case they exist\n fpti.data.erpg = fpti.data.error_desc = fpti.data.message = s.prop14 = undefined; // error message\n fpti.data.erfd = fpti.data.fieldId = s.prop15 = undefined; // form field with error (field1|field2|field3)\n fpti.data.eccd = fpti.data.error_code = fpti.data.code = s.prop29 = undefined; // error code\n fpti.data.screen = undefined;\n fpti.data.tsrce = 'donatenodeweb';\n\n fireBeacon(fpti, s.prop26, true);\n\n // set attr for automation\n // $('#analytics').attr('data-c27', s.prop27);\n}\n\n/**************\n * Private API\n **************/\n\n/**\n * Set FPTI/SC variables and fire tracking beacons\n * @param {String} prop - Prop value to record\n * @param {Boolean} isLink - whether to record it as an link click or a page transition\n */\nfunction fireBeacon(fpti={}, prop, isLink) { \n if (isLink && arguments.length > 1) {\n s.tl(true, 'o', prop); // micro/link tracking\n analytics.recordClick(fpti); // fpti beacon\n } else {\n s.t(); // fire page-level link tracking event\n analytics.recordImpression(fpti); // fpti beacon\n }\n}\n","import _find from 'lodash/find';\nimport _map from 'lodash/map';\nimport _includes from 'lodash/includes';\nimport _difference from 'lodash/difference';\nimport _intersection from 'lodash/intersection';\nimport _head from 'lodash/head';\nimport _last from 'lodash/last';\n\n/**\n * button_variables that are supported in the Wizard UI\n */\nconst donateButtonVariables = [\n 'amount',\n 'banner_url',\n 'bn',\n 'btn_code_type',\n 'business',\n 'button_name',\n 'cancel_return',\n 'cn',\n 'cpp_header_image',\n 'currency_code',\n 'donor_covers_fees',\n 'int_type',\n 'item_name',\n 'item_number',\n 'lc',\n 'logo_target',\n 'no_note',\n 'no_shipping',\n 'return',\n 'return_url',\n 'version',\n];\n\n/**\n * button_variables supported by buttonFactoryServ\n */\nconst allSupportedButtonVariables = [\n 'business',\n 'item_name',\n 'item_number',\n 'currency_code',\n 'PageButtonBgColor',\n 'PageButtonTextColor',\n 'PageCollapseBgColor',\n 'PageCollapseTextColor',\n 'PageTitleTextColor',\n 'a1',\n 'a2',\n 'a3',\n 'add',\n 'address1',\n 'address2',\n 'address_override',\n 'billing_address1',\n 'billing_address2',\n 'billing_city',\n 'billing_country',\n 'billing_first_name',\n 'billing_last_name',\n 'billing_state',\n 'billing_zip',\n 'bn',\n 'bodyBgColor',\n 'bodyBgImg',\n 'cancel_return',\n 'cbt',\n 'city',\n 'cn',\n 'country',\n 'custom',\n 'disclaimer_partner_name',\n 'disclaimer_partner_fee',\n 'disp_tot',\n 'first_name',\n 'fixed_denom',\n 'footerTextColor',\n 'footerTextlinkColor',\n 'headerBgColor',\n 'headerHeight',\n 'invoice',\n 'last_name',\n 'lc',\n 'logoFont',\n 'logoFontColor',\n 'logoFontSize',\n 'logoImage',\n 'logoImagePosition',\n 'logoText',\n 'logo_url',\n 'max_text',\n 'min_amount',\n 'night_phone_a',\n 'night_phone_b',\n 'night_phone_c',\n 'no_note',\n 'no_shipping',\n 'notify_url',\n 'orderSummaryBgColor',\n 'orderSummaryBgImage',\n 'p1',\n 'p2',\n 'p3',\n 'paymentaction',\n 'pp_note',\n 'return',\n 'return_url',\n 'rm',\n 'set_customer_limit',\n 'shipping',\n 'shopping_url',\n 'showBillingAddress',\n 'showBillingEmail',\n 'showBillingPhone',\n 'showCardInfo',\n 'showCustomerName',\n 'showHostedThankyouPage',\n 'showShippingAddress',\n 'sold_out_url',\n 'sra',\n 'src',\n 'srt',\n 'state',\n 'style_color',\n 'style_color',\n 'style_theme',\n 'subtotal',\n 't1',\n 't2',\n 't3',\n 'tax',\n 'tax_rate',\n 'template',\n 'undefined_quantity',\n 'usr_manage',\n 'weight',\n 'weight_unit',\n 'zi',\n];\n\nconst getButtonVariable = (buttonVariables, key) => {\n return _find(buttonVariables, { name: key });\n};\n\nconst getNames = (buttonVariables) => {\n return _map(buttonVariables, 'name');\n};\n\nconst getButtonVariables = (buttonVariables, names) => {\n return _map(names, (name) => {\n return getButtonVariable(buttonVariables, name);\n });\n};\n\nexport const isSupportedVariable = (name) => {\n return _includes(allSupportedButtonVariables, name);\n};\n\n/**\n * Gets all the 'button_variables' that are considered \"extra\" or \"advanced\"\n *\n * Any button_variable that is not handled in any of the wizard\n * steps are considered extra or advanced\n * Eg: 'amount' is a button_variable but it has a dedicated field in wizard step 3\n * So 'amount' is not an extra/advanced variable\n */\nexport const getExtraVariables = (buttonVariables) => {\n const buttonVariableNames = getNames(buttonVariables);\n const extraVariables = _difference(\n buttonVariableNames,\n donateButtonVariables\n );\n\n return getButtonVariables(buttonVariables, extraVariables);\n};\n\n/**\n * Gets all button variables that are unsupported by ButtonFactory\n *\n * Webscr button factory allows users to input *any* variable that they want.\n * But not all the button_variables are \"supported\"\n *\n */\nexport const getUnsupportedVariables = (buttonVariables) => {\n const extraVariables = getExtraVariables(buttonVariables);\n const extraVariableNames = getNames(extraVariables);\n\n const unsupportedVariableNames = _difference(\n extraVariableNames,\n allSupportedButtonVariables\n );\n\n return getButtonVariables(buttonVariables, unsupportedVariableNames);\n};\n\n/**\n * Gets all button_variables that are supported by ButtonFactory\n */\nexport const getSupportedVariables = (buttonVariables) => {\n const extraVariables = getExtraVariables(buttonVariables);\n const extraVariableNames = getNames(extraVariables);\n const supportedVariableNames = _intersection(\n extraVariableNames,\n allSupportedButtonVariables\n );\n\n return getButtonVariables(buttonVariables, supportedVariableNames);\n};\n\n/**\n * Creates view for the textarea used for extra/advanced variables.\n *\n */\nexport const generateViewForSupportedVars = (buttonVariables) => {\n const supportedVariables = getSupportedVariables(buttonVariables);\n const variables = _map(supportedVariables, (supportedVariable) => {\n return `${supportedVariable.name}=${supportedVariable.value}`;\n });\n return variables.join('\\n');\n};\n\nexport const formatVariablesForTextArea = (buttonVariables) => {\n const variables = _map(buttonVariables, (buttonVariable) => {\n return `${buttonVariable.name}=${buttonVariable.value}`;\n });\n return variables.join('\\n');\n};\n\nexport const parseTextAreaValue = (textAreaValue) => {\n const variables = textAreaValue.split('\\n');\n let extraVariables;\n\n try {\n extraVariables = _map(variables, (variable) => {\n const input = variable.split('=');\n\n // Consider URLs including equal symbols\n const value = input.length > 2 ? input.slice(1).join('=') : _last(input);\n\n return {\n name: _head(input),\n value,\n };\n });\n } catch (e) {\n console.log('Exception occurred while parsing user input ');\n }\n\n return extraVariables;\n};\n","import getContent from 'pp-react-l10n';\n\nexport const shouldShowBadge = (showBadge) => {\n try {\n const newFeatureBadge =\n getContent('locals')('buttonsV3/common')('newFeatureBadge');\n\n return typeof newFeatureBadge !== 'string' || !showBadge\n ? false\n : newFeatureBadge;\n } catch (e) {\n return false;\n }\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { getDonateButtonImageUrl } from '../../utils/buttonImage';\nimport getLocaleMessages from '../../utils/localesMessages';\n\nconst { browser } = getLocaleMessages('buttonsV3/common');\n\nclass DonateButtonPreview extends Component {\n static propTypes = {\n buttonSize: PropTypes.string,\n showAcceptedCardLogos: PropTypes.bool,\n locale: PropTypes.string,\n country: PropTypes.string,\n buttonLocaleUrls: PropTypes.object,\n };\n\n getDonateButtonUrl = (...args) => {\n return getDonateButtonImageUrl(...args);\n };\n\n render() {\n const donateButtonUrl = this.getDonateButtonUrl(\n this.props.buttonSize,\n this.props.showAcceptedCardLogos,\n this.props.locale,\n this.props.country\n );\n\n return (\n
\n {donateButtonUrl && {browser.header}}\n
\n );\n }\n}\nexport default DonateButtonPreview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CaptionText } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../utils/localesMessages';\n\nconst { previewContainerText, browser } =\n getLocaleMessages('buttonsV3/preview');\n\nconst ImageButtonPreview = ({ buttonImageUrl, onError }) => {\n if (!buttonImageUrl) {\n return (\n \n {previewContainerText}\n \n );\n }\n\n return (\n
\n {\n if (onError) {\n onError(error);\n }\n }}\n />\n
\n );\n};\n\nImageButtonPreview.propTypes = {\n buttonImageUrl: PropTypes.string,\n onError: PropTypes.func,\n};\n\nexport default ImageButtonPreview;\n","import React from 'react';\nimport DonateButtonPreview from './DonateButtonPreview';\nimport ImageButtonPreview from './ImageButtonPreview';\nimport PropTypes from 'prop-types';\n\nconst ButtonPreviewContainer = ({\n usePaypalButtonStyle,\n showAcceptedCardLogos,\n buttonSize,\n locale,\n country,\n buttonLocaleUrls,\n buttonImageUrl,\n onError,\n}) => {\n return (\n
\n
\n {usePaypalButtonStyle ? (\n \n ) : (\n \n )}\n
\n
\n );\n};\nButtonPreviewContainer.propTypes = {\n usePaypalButtonStyle: PropTypes.bool,\n buttonSize: PropTypes.string,\n showAcceptedCardLogos: PropTypes.bool,\n locale: PropTypes.string,\n country: PropTypes.string,\n buttonImageUrl: PropTypes.string,\n onError: PropTypes.func,\n buttonLocaleUrls: PropTypes.object,\n};\n\nexport default ButtonPreviewContainer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SkeletonScreen = ({ isGuestPagePreview = false }) => {\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\nSkeletonScreen.propTypes = {\n isGuestPagePreview: PropTypes.bool,\n};\n\nexport default SkeletonScreen;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SkeletonScreen from './SkeletonScreen';\nimport CommonPreviewComponent from './CommonPreviewComponent';\nimport getLocaleMessages from '../../utils/localesMessages';\nconst messages = getLocaleMessages('buttonsV3/buttonPreview');\n\nconst ButtonFactoryV3SdkPreview = ({\n isButtonOverviewPreview = false,\n isGuestPagePreview = false,\n}) => {\n return (\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n );\n};\n\nButtonFactoryV3SdkPreview.propTypes = {\n isButtonOverviewPreview: PropTypes.bool,\n isGuestPagePreview: PropTypes.bool,\n};\nexport default ButtonFactoryV3SdkPreview;\n","import AppStore from '../../stores/AppStore';\nimport * as AppActions from '../../actions/AppActions';\nimport {\n formatAmount,\n formatInputAmount,\n normalizeNumber,\n} from '../../utility/formator';\nimport TemplateData from '../../utility/getTemplateData';\nimport { getParameterByName } from '../../utility/queryStringHelper';\n\nexport const isOptInCoverFee = () => {\n return AppStore.getCoverFeeOptInStatus() === 'checked';\n};\n\nexport const isAtLandingPage = () => {\n const isGuestReviewPage =\n window.location.pathname.includes('guest') ||\n ![undefined, null].includes(getParameterByName('signup'));\n return !isGuestReviewPage;\n};\n\nexport const computeFeeAmount = () => {\n const donationAmount = normalizeNumber(AppStore.getDonationAmount()),\n flatFee = parseFloat(TemplateData.flatFee),\n feeRate = parseFloat(TemplateData.feeRate) * 0.01;\n\n if (donationAmount > 0) {\n // X is the full amount the donor needs to pay for the charity to receive $100\n // X - .03X - $0.30 = $100\n // If X is the full amount the donor needs to pay for the charity to receive Y\n // X - feeRate*X - flatFee = Y\n // X = (Y + flatFee) / (1 - feeRate)\n const totalAmountAfterFee = (donationAmount + flatFee) / (1 - feeRate),\n feeAmount = totalAmountAfterFee - donationAmount;\n return feeAmount;\n }\n\n return 0;\n};\n\nexport const computeAmountAfterFee = (donationAmount, feeAmount) => {\n const currency = AppStore.getDonationCode(),\n formatedAmountValue = formatInputAmount({\n value: donationAmount,\n currency,\n }),\n totalAmount =\n normalizeNumber(formatedAmountValue) + normalizeNumber(feeAmount),\n formatedTotalAmountValue = formatInputAmount({\n value: totalAmount,\n currency,\n });\n\n return formatedTotalAmountValue;\n};\n\nexport const setFeeAmountInStore = () => {\n const feeAmount = computeFeeAmount(),\n currencyCode = AppStore.getDonationCode(),\n formatedFeeAmount = formatAmount({\n currency: currencyCode,\n value: feeAmount,\n }),\n formatedFeeAmountValue = formatInputAmount({\n value: feeAmount,\n currency: currencyCode,\n });\n\n AppActions.changeFeeAmount({ feeAmount: formatedFeeAmountValue });\n AppActions.changeFormatedFeeAmount({\n formatedFeeAmount,\n });\n};\n\nexport const updateDonationAmount = (amount) => {\n const currencyCode = AppStore.getDonationCode(),\n formatedAmount = formatAmount({\n currency: currencyCode,\n value: amount,\n });\n AppActions.changeAmount({ amount });\n AppActions.changeFormatedAmount({ formatedAmount });\n};\n\nexport const restoreDonationAmount = () => {\n const rawAmount = AppStore.getAmountBeforeFee() || TemplateData.rawAmount;\n updateDonationAmount(rawAmount.toString());\n};\n\nexport const optOutCoverFee = () => {\n AppActions.changeCoverFee({ coverFee: 'unchecked' });\n AppActions.changeFeeAmount({ feeAmount: 0 });\n AppActions.changeFormatedAmount({ formatedFeeAmount: '' });\n};\n\nexport const shouldSelectPresetAmount = (amount) => {\n if (!amount) {\n return false;\n }\n\n const presetAmounts = TemplateData.presetAmounts;\n return presetAmounts.map(Number).includes(normalizeNumber(amount));\n};\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 { isSupportedVariable, parseTextAreaValue } from '../lib/extraVariables';\nimport _each from 'lodash/each';\nimport _get from 'lodash/get';\n\nexport function isValidSecureUrl(url) {\n let urlRegex =\n /^((https|HTTPS):\\/\\/)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]%@!\\$&'\\(\\)\\*\\+,;=.]+$/; // eslint-disable-line\n return urlRegex.test(url);\n}\n\nexport function isValidUrl(url) {\n let urlRegex =\n /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]%@!\\$&'\\(\\)\\*\\+,;=.]+$/; // eslint-disable-line\n return urlRegex.test(url);\n}\n\nexport function isValidEmail(email) {\n let emailRegex =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return emailRegex.test(email);\n}\n\nexport function validateExtraVariables(extraVariables) {\n if (!extraVariables) {\n return null;\n }\n const variables = parseTextAreaValue(extraVariables);\n let unsupportedVariables = [];\n _each(variables, (variable) => {\n const key = _get(variable, 'name');\n if (key && !isSupportedVariable(key)) {\n unsupportedVariables.push(key);\n }\n });\n\n return unsupportedVariables.join(' ');\n}\n\nexport function byteLength(str) {\n // returns byte length of an utf8 string\n let byteCount = str.length;\n\n // Based on the ascii code we can tell if the\n // char is of 1 or 2 or 3 bytes.\n for (let i = str.length - 1; i >= 0; i--) {\n let code = str.charCodeAt(i);\n\n if (code > 0x7f && code <= 0x7ff) {\n byteCount++;\n } else if (code > 0x7ff && code <= 0xffff) {\n byteCount += 2;\n }\n if (code >= 0xdc00 && code <= 0xdfff) {\n i--;\n }\n }\n return byteCount;\n}\n","import _get from 'lodash/get';\nimport _find from 'lodash/find';\nimport _findKey from 'lodash/findKey';\nimport _each from 'lodash/each';\nimport _isEmpty from 'lodash/isEmpty';\nimport { getDonateButtonImageUrl } from '../utils/buttonImage';\nimport {\n getSupportedVariables,\n getUnsupportedVariables,\n formatVariablesForTextArea,\n parseTextAreaValue,\n} from './extraVariables';\nimport getStore from '../store/configureStore';\nimport _includes from 'lodash/includes';\nimport { isLoggedInUser } from '../utils/authUtils';\nimport { formatAmountFromServer, normalizeNumber } from '../utils/amountUtils';\nimport { isValidSecureUrl } from '../utils/clientValidatorUtils';\nimport {\n LOGO_TARGET_NOLOGO,\n LOGO_TARGET_BUTTON,\n LOGO_TARGET_PROFILE,\n} from '../reducers/reducerButtonFactory';\n\nexport const ACCOUNT_IDENTIFIER_TYPES = {\n MERCHANT_ACCOUNT_ID: 'merchantAccountId',\n EMAIL_ADDRESS: 'emailAddress',\n};\n\n// All supported server button props\nexport const SERVER_BUTTON = {\n ID: 'id',\n WEBSITE_CODE: 'website_code',\n EMAIL_CODE: 'email_code',\n CODE: 'code',\n TYPE: 'type',\n SUBTYPE: 'sub_type',\n BUTTON_IMAGE: 'button_image',\n BUTTON_IMAGE_URL: 'button_image_url',\n COUNTRY_CODE: 'country_code',\n LANGUAGE: 'language',\n BUTTON_VARIABLES: 'button_variables',\n CURRENCY_CODE: 'currency_code',\n LC: 'lc',\n BN: 'bn',\n ITEM_NAME: 'item_name',\n ITEM_NUMBER: 'item_number',\n NO_NOTE: 'no_note',\n NO_SHIPPING: 'no_shipping',\n CANCEL_RETURN: 'cancel_return',\n RETURN: 'return',\n BUSINESS: 'business',\n AMOUNT: 'amount',\n AMOUNT_TYPE: 'amount_type',\n AMOUNT_OPTIONS: 'amount_options',\n LOGO_URL: 'cpp_header_image',\n DONATE_CONTEXT: 'donate_context',\n RECURRING_OPTION: 'recurring_option',\n NO_RECURRING: 'no_recurring',\n COVER_FEES_OPTION: 'donor_covers_fees',\n PROGRAMNAMES: 'program_names',\n LOGO_TARGET: 'logo_target',\n};\n\n// All supported client button props\nexport const CLIENT_BUTTON = {\n ID: 'id',\n CODE: 'code',\n TYPE: 'type',\n BUTTON_IMAGE: 'buttonImage',\n BUTTON_IMAGE_URL: 'buttonImageUrl',\n COUNTRY_CODE: 'countryCode',\n LANGUAGE: 'language',\n CURRENCY_CODE: 'currencyCode',\n LC: 'lc',\n BN: 'bn',\n ITEM_NAME: 'purpose',\n ITEM_NUMBER: 'itemNumber',\n NO_NOTE: 'noNote',\n NO_SHIPPING: 'noShipping',\n CANCEL_RETURN: 'cancelReturn',\n RETURN: 'return',\n BUSINESS: 'business',\n AMOUNT: 'amountValue',\n AMOUNT_TYPE: 'amountType',\n MERCHANT_AMOUNT_1: 'merchantAmount1',\n MERCHANT_AMOUNT_2: 'merchantAmount2',\n MERCHANT_AMOUNT_3: 'merchantAmount3',\n PURPOSE: 'purpose',\n USE_PAYPAL_BUTTON_STYLE: 'usePaypalButtonStyle',\n SHOW_ACCEPTED_CARD_LOGOS: 'showAcceptedCardLogos',\n BTN_SIZE: 'buttonSize',\n RECEIVER_CURRENCY: 'receiverCurrency',\n ACCOUNT_IDENTIFIER_TYPE: 'accountIdentifierType',\n ORGANIZATION_NAME: 'organizationName',\n LOGO_URL: 'logoUrl',\n SETTINGS_LOGO_URL: 'settingsLogoUrl',\n SHOW_ACCOUNT_LOGO_OPTIONS: 'showAccountLogoOptions',\n BUTTON_VARIABLES: 'extraVariablesView',\n RECURRING_OPTION: 'recurringEnabled',\n COVER_FEES_OPTION: 'coverFeesEnabled',\n LISTPROGRAMS: 'listPrograms',\n PROGRAMNAMES: 'programNames',\n LOGO_TARGET: 'logoTarget',\n PROGRAMINPUT: 'programInput',\n};\n\n/**\n * Gets value of a button property in the button_variables array\n * @param {Object} button Button object(server format)\n * @param {String} property Property to get\n * @return {String} Value of the property\n */\nexport function getButtonVariable(button, property) {\n const buttonVar = _find(button.button_variables, (buttonVariable) => {\n return buttonVariable.name === property;\n });\n\n return _get(buttonVar, 'value');\n}\n\n/**\n * Adds button variable to the button_variables array\n * @param {Object} clientFormat Button object(client format)\n * @param {String} clientKey Client property\n * @param {Object} serverFormat Button object(server format)\n * @param {String} serverKey Server property\n */\nfunction addButtonVariable(clientFormat, clientKey, serverFormat, serverKey) {\n if (clientFormat[clientKey] !== undefined) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: serverKey,\n value: clientFormat[clientKey],\n });\n }\n}\n\n/**\n * Returns true if accepted card logos should be displayed\n */\nexport const shouldShowAcceptedCardLogos = (button) => {\n return !!/CC_/.test(button.button_image_url); // eslint-disable-line\n};\n\nconst buttonSizeMap = {\n sm: 'small',\n md: 'medium',\n lg: 'large',\n};\n\n/**\n * Gets button size\n * @param {Object} button Button\n * @return {String} Size of the button ('small' or 'large')\n */\nexport const getButtonSize = (button) => {\n const size = /_(\\D{2})\\.gif/.exec(button.button_image_url); // eslint-disable-line\n if (size && size.length) {\n return buttonSizeMap[size[1].toLowerCase()];\n }\n\n // Default to 'small' ?\n return 'small';\n};\n\n/**\n * Gets button image and button image url\n */\nexport const getButtonImageAndUrl = (\n buttonSize,\n showAcceptedCardLogos,\n locale,\n country\n) => {\n const buttonImageUrl = getDonateButtonImageUrl(\n buttonSize,\n showAcceptedCardLogos,\n locale,\n country\n );\n let buttonImage = 'REG';\n if (showAcceptedCardLogos) {\n buttonImage = 'CC';\n }\n\n if (buttonSize === 'small') {\n buttonImage = 'SML';\n }\n\n return {\n button_image: buttonImage,\n button_image_url: buttonImageUrl,\n };\n};\n\n/**\n * Returns true if its a Paypal button\n */\nexport const shouldUsePayPalButtonStyle = (button) => {\n const buttonImageUrl = button.button_image_url || '';\n if (buttonImageUrl.length) {\n if (\n buttonImageUrl.includes('msmaster') ||\n buttonImageUrl.includes('paypalobjects') ||\n buttonImageUrl.includes('paypal.com')\n ) {\n return 'yes';\n }\n }\n\n return 'no';\n};\n\nexport const getAccountIdentifierType = (value) => {\n // Is this an email address or encrypted_account_number\n if (value && value.indexOf('@') !== -1) {\n return ACCOUNT_IDENTIFIER_TYPES.EMAIL_ADDRESS;\n }\n return ACCOUNT_IDENTIFIER_TYPES.MERCHANT_ACCOUNT_ID;\n};\n\nexport const getAccountIdentifierValue = (isServerToClient, serverFormat) => {\n const reduxStore = getStore();\n const reduxState = reduxStore.getState();\n const isLoggedIn = isLoggedInUser(_get(reduxState, 'application'));\n const accountIdentifier = _get(\n reduxStore.getState(),\n 'application.accountIdentifier'\n );\n\n if (!isLoggedIn) {\n return getButtonVariable(serverFormat, SERVER_BUTTON.BUSINESS);\n }\n\n if (isServerToClient) {\n return _get(accountIdentifier, 'email');\n }\n\n return _get(accountIdentifier, 'encrypted_account_number');\n};\n\nexport const getLogoUrlFieldValues = (serverFormatButton) => {\n // Payment Settings logo url\n const reduxState = getStore().getState();\n const merchantExperienceUrl = _get(\n reduxState,\n 'application.merchantExperienceUrls.logoUrl'\n );\n const businessImageUrl = _get(\n reduxState,\n 'application.businessImageUrls.url'\n );\n\n // Set logo values for clientSide\n const settingsLogoUrl = merchantExperienceUrl\n ? merchantExperienceUrl\n : businessImageUrl;\n let logoUrl = getButtonVariable(serverFormatButton, 'cpp_header_image');\n const showAccountLogoOptions = merchantExperienceUrl || businessImageUrl;\n\n let logoTarget = LOGO_TARGET_NOLOGO;\n\n // If user has specified logo\n if (logoUrl && isValidSecureUrl(logoUrl)) {\n // If url is same as \"settings\" url\n if (logoUrl === merchantExperienceUrl || logoUrl === businessImageUrl) {\n logoTarget = LOGO_TARGET_PROFILE;\n logoUrl = ''; // Don't display this value in the UI\n } else {\n logoTarget = LOGO_TARGET_BUTTON;\n }\n } else {\n // User has not specified a logo url\n // If logo is present in \"settings\", use it\n // eslint-disable-next-line no-lonely-if\n if (\n isValidSecureUrl(merchantExperienceUrl) ||\n isValidSecureUrl(businessImageUrl)\n ) {\n logoTarget = LOGO_TARGET_PROFILE;\n }\n }\n\n return {\n logoTarget,\n logoUrl,\n settingsLogoUrl,\n showAccountLogoOptions,\n };\n};\n\n/**\n * The logo value to be saved in the button\n * If user has entered a value, then save it in the button.\n * If not, no value should be saved\n * @param {String} logoUrl User entered logo url\n * @return {String} Logo Url to be saved in the button\n */\nexport const getServerValueForLogoUrl = (logoTarget, logoUrl) => {\n if (logoTarget === LOGO_TARGET_PROFILE) {\n const reduxStore = getStore();\n const merchantExperienceUrl = _get(\n reduxStore.getState(),\n 'application.merchantExperienceUrls.logoUrl'\n );\n\n if (merchantExperienceUrl) {\n // User has Logo in Payment Settings\n // Nothing to save in \"button\"\n return '';\n }\n\n const businessImageUrl = _get(\n reduxStore.getState(),\n 'application.businessImageUrls.url'\n );\n if (businessImageUrl) {\n // User has Logo in Account Settings\n // This has to be saved in the \"button\"\n return businessImageUrl;\n }\n } else {\n // User wants to save the entered logoUrl\n return logoUrl;\n }\n};\n\nexport const checkIfOldButton = (serverFormat) => {\n return _isEmpty(serverFormat[SERVER_BUTTON.DONATE_CONTEXT]);\n};\n\nexport const getRecurringOption = (serverFormat) => {\n const isOldButton = checkIfOldButton(serverFormat);\n const noRecurring = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.NO_RECURRING\n );\n\n if (isOldButton && _isEmpty(noRecurring)) {\n const amountValue = getButtonVariable(serverFormat, SERVER_BUTTON.AMOUNT);\n // for button with fixed amount, default to false.\n return amountValue > 0 ? 'false' : 'true';\n }\n\n if (noRecurring === '0') {\n return 'true';\n } else if (noRecurring === '1') {\n return 'false';\n }\n\n return serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.RECURRING_OPTION\n ];\n};\n\n/**\n * Transform button from server format to client format\n */\nexport const transformServerFormatToClient = (serverFormat) => {\n const clientFormat = {};\n\n if (serverFormat.id) {\n clientFormat.id = serverFormat.id;\n }\n\n // Top level variables\n clientFormat[CLIENT_BUTTON.BUTTON_IMAGE] =\n serverFormat[SERVER_BUTTON.BUTTON_IMAGE];\n clientFormat[CLIENT_BUTTON.BUTTON_IMAGE_URL] =\n serverFormat[SERVER_BUTTON.BUTTON_IMAGE_URL];\n\n // variables from the button_variables array\n const noShipping = getButtonVariable(serverFormat, SERVER_BUTTON.NO_SHIPPING);\n clientFormat[CLIENT_BUTTON.NO_SHIPPING] = noShipping === '0' ? 'no' : 'yes';\n\n const noNote = getButtonVariable(serverFormat, SERVER_BUTTON.NO_NOTE);\n clientFormat[CLIENT_BUTTON.NO_NOTE] = noNote === '0' ? 'no' : 'yes';\n\n clientFormat[CLIENT_BUTTON.RECEIVER_CURRENCY] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.CURRENCY_CODE\n );\n clientFormat[CLIENT_BUTTON.CANCEL_RETURN] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.CANCEL_RETURN\n );\n clientFormat[CLIENT_BUTTON.RETURN] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.RETURN\n );\n clientFormat[CLIENT_BUTTON.PURPOSE] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NAME\n );\n clientFormat[CLIENT_BUTTON.ITEM_NUMBER] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION] = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.COVER_FEES_OPTION\n );\n clientFormat[CLIENT_BUTTON.ACCOUNT_IDENTIFIER_TYPE] =\n getAccountIdentifierType(\n getButtonVariable(serverFormat, SERVER_BUTTON.BUSINESS)\n );\n clientFormat[CLIENT_BUTTON.BUSINESS] = getAccountIdentifierValue(\n true,\n serverFormat\n );\n\n const countryCode = serverFormat[SERVER_BUTTON.COUNTRY_CODE];\n clientFormat[CLIENT_BUTTON.COUNTRY_CODE] = countryCode;\n clientFormat[CLIENT_BUTTON.LANGUAGE] = serverFormat[SERVER_BUTTON.LANGUAGE];\n\n // Derived variables\n clientFormat[CLIENT_BUTTON.USE_PAYPAL_BUTTON_STYLE] =\n shouldUsePayPalButtonStyle(serverFormat);\n clientFormat[CLIENT_BUTTON.SHOW_ACCEPTED_CARD_LOGOS] =\n shouldShowAcceptedCardLogos(serverFormat);\n clientFormat[CLIENT_BUTTON.BTN_SIZE] = getButtonSize(serverFormat);\n\n const logoFieldValues = getLogoUrlFieldValues(serverFormat);\n clientFormat[CLIENT_BUTTON.LOGO_URL] = logoFieldValues.logoUrl;\n clientFormat[CLIENT_BUTTON.LOGO_TARGET] =\n getButtonVariable(serverFormat, SERVER_BUTTON.LOGO_TARGET) ||\n logoFieldValues.logoTarget;\n clientFormat[CLIENT_BUTTON.SETTINGS_LOGO_URL] =\n logoFieldValues.settingsLogoUrl;\n clientFormat[CLIENT_BUTTON.SHOW_ACCOUNT_LOGO_OPTIONS] =\n logoFieldValues.showAccountLogoOptions;\n\n const supportedVariables = getSupportedVariables(\n serverFormat.button_variables\n );\n clientFormat.extraVariablesView =\n formatVariablesForTextArea(supportedVariables);\n\n const unsupportedVariables = getUnsupportedVariables(\n serverFormat.button_variables\n );\n clientFormat.unsupportedVariables = unsupportedVariables;\n\n const amount = getButtonVariable(serverFormat, SERVER_BUTTON.AMOUNT);\n const currency = clientFormat[CLIENT_BUTTON.RECEIVER_CURRENCY];\n\n if (amount !== undefined) {\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = 'fixed';\n clientFormat[CLIENT_BUTTON.AMOUNT] = formatAmountFromServer(\n amount,\n currency\n );\n } else {\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = 'variable';\n }\n\n const coverFees = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.COVER_FEES_OPTION\n );\n clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION] =\n coverFees === 'true' ? 'yes' : 'no';\n\n const recurringOption = getRecurringOption(serverFormat);\n clientFormat[CLIENT_BUTTON.RECURRING_OPTION] =\n recurringOption === 'true' ? 'yes' : 'no';\n\n if (!checkIfOldButton(serverFormat)) {\n // For 'fixed' amounttype, do not read from 'donate_context'\n if (clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] !== 'fixed') {\n let amountType =\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.AMOUNT_TYPE];\n if (!amountType) {\n amountType = 'variable';\n }\n amountType = amountType.toLowerCase();\n clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] = amountType;\n\n if (clientFormat[CLIENT_BUTTON.AMOUNT_TYPE] === 'merchant_recommended') {\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_1] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[0]`\n ),\n currency\n );\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_2] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[1]`\n ),\n currency\n );\n clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_3] = formatAmountFromServer(\n _get(\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT],\n `${SERVER_BUTTON.AMOUNT_OPTIONS}[2]`\n ),\n currency\n );\n }\n }\n\n const programNames =\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES];\n if (!_isEmpty(programNames)) {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'yes';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = programNames;\n\n for (let i = 0; i < programNames.length; i++) {\n clientFormat[`${CLIENT_BUTTON.PROGRAMINPUT}${i}`] = programNames[i];\n }\n } else {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'no';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = [];\n }\n }\n\n // case: 'NEW PROGRAMS'\n // If it is V1 button, convert V1Program to V2Program\n // If it is V2 button, nothing to convert\n if (checkIfOldButton(serverFormat)) {\n const v0Program = getButtonVariable(\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n if (v0Program) {\n clientFormat[CLIENT_BUTTON.LISTPROGRAMS] = 'yes';\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES] = [v0Program];\n }\n }\n\n return clientFormat;\n};\n\n/**\n * Transform button from client format to server format\n */\nexport const transformClientFormatToServer = (clientFormat) => {\n let serverFormat = {};\n\n if (clientFormat.id) {\n serverFormat[SERVER_BUTTON.ID] = clientFormat.id;\n }\n\n const reduxStore = getStore();\n const reduxState = reduxStore.getState();\n const isLoggedIn = isLoggedInUser(_get(reduxState, 'application'));\n const isHosted = _includes(\n ['BUSINESS', 'PREMIER'],\n _get(reduxState, 'application.userType')\n );\n const isMerchantIdEnabled = _includes(\n ['BUSINESS', 'PREMIER', 'PERSONAL'],\n _get(reduxState, 'application.userType')\n );\n const isProgramEnabled = _get(\n reduxStore.getState(),\n 'application.enableProgram'\n );\n const isMerchantPresetAmountEnabled = _get(\n reduxStore.getState(),\n 'application.enableMerchantPresetAmount'\n );\n const isRecurringEnabled = _get(\n reduxStore.getState(),\n 'application.enableRecurring'\n );\n\n serverFormat[SERVER_BUTTON.COUNTRY_CODE] = clientFormat.countryCode;\n serverFormat[SERVER_BUTTON.TYPE] = 'DONATE';\n serverFormat[SERVER_BUTTON.SUBTYPE] = 'PRODUCTS';\n serverFormat[SERVER_BUTTON.LANGUAGE] = clientFormat.language;\n\n // Create array of `button_variables`\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES] = [];\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.PURPOSE,\n serverFormat,\n SERVER_BUTTON.ITEM_NAME\n );\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.CANCEL_RETURN,\n serverFormat,\n SERVER_BUTTON.CANCEL_RETURN\n );\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.RETURN,\n serverFormat,\n SERVER_BUTTON.RETURN\n );\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.RECEIVER_CURRENCY,\n serverFormat,\n SERVER_BUTTON.CURRENCY_CODE\n );\n\n if (isLoggedIn) {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.LOGO_TARGET,\n serverFormat,\n SERVER_BUTTON.LOGO_TARGET\n );\n }\n\n if (!isHosted && isRecurringEnabled) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_RECURRING,\n value: clientFormat[CLIENT_BUTTON.RECURRING_OPTION] === 'yes' ? 0 : 1,\n });\n }\n\n if (\n clientFormat.logoTarget &&\n clientFormat.logoTarget === LOGO_TARGET_BUTTON\n ) {\n // logo_url button_variable\n // This field should only be included if user has entered logo url\n const logoUrl = getServerValueForLogoUrl(\n clientFormat.logoTarget,\n clientFormat.logoUrl\n );\n if (logoUrl) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.LOGO_URL,\n value: logoUrl,\n });\n }\n }\n\n // Business field\n if (isLoggedIn && isMerchantIdEnabled) {\n const accountIdentifierValue = getAccountIdentifierValue(false);\n if (accountIdentifierValue) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.BUSINESS,\n value: accountIdentifierValue,\n });\n }\n } else {\n clientFormat[CLIENT_BUTTON.BUSINESS] = (\n clientFormat[CLIENT_BUTTON.BUSINESS] || ''\n ).toLowerCase();\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.BUSINESS,\n serverFormat,\n SERVER_BUTTON.BUSINESS\n );\n }\n\n // Amount field\n const amountType = clientFormat[CLIENT_BUTTON.AMOUNT_TYPE];\n if (amountType === 'fixed' && clientFormat[CLIENT_BUTTON.AMOUNT]) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.AMOUNT,\n value: normalizeNumber(clientFormat[CLIENT_BUTTON.AMOUNT]),\n });\n }\n\n if (isHosted) {\n // Generate donate_context\n // Set `amount_type`\n if (\n isMerchantPresetAmountEnabled ||\n isRecurringEnabled ||\n isProgramEnabled\n ) {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT] = {};\n }\n\n // Create array of `amount_options`\n if (isMerchantPresetAmountEnabled && amountType !== 'fixed') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.AMOUNT_TYPE] =\n amountType.toUpperCase();\n\n if (amountType === 'merchant_recommended') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ] = [];\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_1]));\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_2]));\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.AMOUNT_OPTIONS\n ].push(normalizeNumber(clientFormat[CLIENT_BUTTON.MERCHANT_AMOUNT_3]));\n }\n }\n\n // Recurring option\n if (isRecurringEnabled) {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][\n SERVER_BUTTON.RECURRING_OPTION\n ] =\n clientFormat[CLIENT_BUTTON.RECURRING_OPTION] === 'yes'\n ? 'true'\n : 'false';\n }\n\n // Program Names\n if (isProgramEnabled) {\n if (clientFormat[CLIENT_BUTTON.LISTPROGRAMS] === 'yes') {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES] =\n clientFormat[CLIENT_BUTTON.PROGRAMNAMES];\n } else {\n serverFormat[SERVER_BUTTON.DONATE_CONTEXT][SERVER_BUTTON.PROGRAMNAMES] =\n [];\n }\n }\n }\n\n // Handle ITEM_NUMBER\n // When editing a V1 button in V2, ITEM_NUMBER has to be set to \"\"\n if (isHosted) {\n if (isProgramEnabled) {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.ITEM_NUMBER,\n value: '',\n });\n } else {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.ITEM_NUMBER,\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n }\n } else {\n addButtonVariable(\n clientFormat,\n CLIENT_BUTTON.ITEM_NUMBER,\n serverFormat,\n SERVER_BUTTON.ITEM_NUMBER\n );\n }\n\n // no_shipping field\n const noShipping = clientFormat[CLIENT_BUTTON.NO_SHIPPING];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_SHIPPING,\n value: noShipping === 'no' ? 0 : 1,\n });\n\n if (isHosted) {\n const coverFees = clientFormat[CLIENT_BUTTON.COVER_FEES_OPTION];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.COVER_FEES_OPTION,\n value: coverFees === 'yes' ? 'true' : 'false',\n });\n }\n\n // no_note field\n const noNote = clientFormat[CLIENT_BUTTON.NO_NOTE];\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push({\n name: SERVER_BUTTON.NO_NOTE,\n value: noNote === 'no' ? 0 : 1,\n });\n\n // Add button_image and button_image_url\n if (clientFormat.usePaypalButtonStyle === 'no') {\n serverFormat.button_image_url = clientFormat.buttonImageUrl;\n } else {\n const buttonImageProps = getButtonImageAndUrl(\n clientFormat.buttonSize,\n clientFormat.showAcceptedCardLogos,\n clientFormat.language,\n clientFormat.countryCode\n );\n serverFormat.button_image_url = buttonImageProps.button_image_url;\n serverFormat.button_image = buttonImageProps.button_image;\n }\n\n if (clientFormat.extraVariablesView) {\n const extraVariables = parseTextAreaValue(clientFormat.extraVariablesView);\n _each(extraVariables, (variable) => {\n serverFormat[SERVER_BUTTON.BUTTON_VARIABLES].push(variable);\n });\n }\n\n return serverFormat;\n};\n\nexport function mapServerFieldToClientField(server_field) {\n const field = _findKey(SERVER_BUTTON, (item) => item === server_field);\n return CLIENT_BUTTON[field];\n}\n","import { getServerProps } from './serverProps';\nimport { isLoggedInUser } from './authUtils';\nimport _includes from 'lodash/includes';\nimport _get from 'lodash/get';\nimport _keys from 'lodash/keys';\nimport _map from 'lodash/map';\nimport _isEmpty from 'lodash/isEmpty';\nimport getStore from '../store/configureStore';\nimport { getParameterByName } from '../../utility/queryStringHelper';\nimport { setTitleCase } from './commonUtils';\nimport { showSpinner } from './spinnerUtils';\n\nconst serverProps = getServerProps();\nconst { userType } = serverProps;\n\nexport const WIZARD_TOTAL_STEPS = isHostedFlow() ? 4 : 3;\n\nexport function getNextStep(currentStep, flowType) {\n const totalSteps = getWizardTotalSteps(flowType);\n if (currentStep < totalSteps) {\n return currentStep + 1;\n }\n return 1;\n}\n\nexport function getPreviousStep(currentStep) {\n if (currentStep > 1) {\n return currentStep - 1;\n }\n return 1;\n}\n\nexport function getNextPageUrl(currentPage, currentPath) {\n const nextPage = currentPage === WIZARD_TOTAL_STEPS ? 0 : currentPage + 1;\n\n return `${currentPath}?page=${nextPage}`;\n}\n\nexport function getPreviousPageUrl(currentPage, currentPath) {\n const previousPage = currentPage === 1 ? 1 : currentPage - 1;\n\n return `${currentPath}?page=${previousPage}`;\n}\n\nexport function getPageUrl(pageNumber, currentPath) {\n const page =\n pageNumber >= 1 && pageNumber <= WIZARD_TOTAL_STEPS ? pageNumber : 1;\n\n return `${currentPath}?page=${page}`;\n}\n\nexport function isHostedFlow() {\n return (\n isLoggedInUser(serverProps) && _includes(['BUSINESS', 'PREMIER'], userType)\n );\n}\n\nexport function isUnhostedFlow() {\n return isLoggedInUser(serverProps) && userType === 'PERSONAL';\n}\n\n/**\n * Fetch select options for language field based on the country selection\n */\nexport const getOptionsForLanguageField = (\n countryAndLanguageDetails,\n selectedCountry\n) => {\n const countriesByCode = countryAndLanguageDetails.countriesByCode;\n\n selectedCountry = selectedCountry || 'US';\n\n const allLanguages = countriesByCode[selectedCountry].languages;\n const languageCodes = _keys(allLanguages);\n\n return _map(languageCodes, (languageCode) => {\n return {\n value: languageCode,\n displayValue: setTitleCase(allLanguages[languageCode].name),\n };\n });\n};\n\nexport const getOptionsForCountriesField = (countryAndLanguageDetails) => {\n const countriesByCode = countryAndLanguageDetails.countriesByCode;\n const countryCodes = _keys(countriesByCode);\n\n return _map(countryCodes, (countryCode) => {\n return {\n value: countryCode,\n displayValue: _get(countriesByCode, `${countryCode}.name`),\n };\n });\n};\n\n// Button Factory V3 Specific Utils\nexport function isBF3Enabled() {\n const reduxStore = getStore();\n return _get(reduxStore.getState(), 'application.enableBf3');\n}\n\nexport function getFlowType() {\n // Get from store\n const reduxStore = getStore();\n const state = reduxStore.getState();\n let flowType =\n _get(state, 'buttonManagerV3.formattedButton.flowType', '') ||\n _get(state, 'buttonFactoryV3.formattedButton.flowType', '');\n\n if (_isEmpty(flowType)) {\n flowType = getParameterByName('type') || 'C';\n }\n\n return flowType;\n}\n\nexport const isDonateButton = (type) => {\n const flowType = type || getFlowType();\n\n return flowType.toUpperCase() === 'C' || flowType.toUpperCase() !== 'S';\n};\n\nexport const isDonateLink = (type) => {\n const flowType = type || getFlowType();\n\n return flowType === 'S';\n};\n\nexport function getWizardTotalSteps(type) {\n const flowType = type || getFlowType();\n\n if (isDonateLink(flowType) && isUnhostedFlow()) {\n return 2;\n } else if (isDonateLink(flowType) || isUnhostedFlow()) {\n return 3;\n }\n\n return 4;\n}\n\nexport function getStepUrl(currentLocation, currentStep, targetStep) {\n // For BF V3\n let { pathname, search } = currentLocation;\n const step =\n targetStep >= 1 && targetStep <= getWizardTotalSteps() ? targetStep : 1;\n\n if (search.includes('page')) {\n search = search.replace(`page=${currentStep}`, `page=${step}`);\n } else if (!_isEmpty(search)) {\n search = `${search}&page=${step}`;\n } else {\n search = `${search}?page=${step}`;\n }\n\n return `${pathname}${search}`;\n}\n\nexport function isTablet() {\n return window.innerWidth >= 577 && window.innerWidth <= 1024;\n}\n\nexport function getUserType() {\n return userType;\n}\n\nexport function getEncryptedAccountNum() {\n return serverProps?.accountIdentifier?.encrypted_account_number;\n}\n\nexport function getSavedButtonsCount() {\n return serverProps?.listButtons?.length;\n}\n\nexport const isGuestFormPreview = (currentStep) =>\n (isDonateButton() && currentStep === 4) ||\n (isDonateLink() && currentStep === 3);\n\nexport const handleLoginHelper = (history) => {\n const renderURL = '/donate/buttons/login?returnUri=/buttons/manage';\n history.push(renderURL);\n showSpinner();\n window.location.reload();\n};\n\nexport const handleSignupHelper = (history) => {\n const renderURL = `/bizsignup/entry?returnUrl=https://${window.location.hostname}/donate/buttons/manage`;\n history.push(renderURL);\n showSpinner();\n window.location.reload();\n};\n","export const BTN_FACTORY_FORM = 'buttonFactory';\nexport const BTN_FACTORY_V3_FORM = 'buttonFactoryV3';\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;\n","import _get from 'lodash/get';\nimport _isEmpty from 'lodash/isEmpty';\nimport {\n getButtonVariable,\n SERVER_BUTTON,\n transformClientFormatToServer as transformClientFormatToServerV3,\n} from '../lib/buttonModelV3';\nimport { destroy } from 'redux-form';\nimport { BTN_FACTORY_V3_FORM } from '../clientConstants';\nimport { fetcher } from '../../utility/domUtils';\n\nexport const BUTTON_FACTORY_BUSY = 'BUTTON_FACTORY_BUSY';\nexport const INITIALIZE_WIZARD = 'INITIALIZE_WIZARD';\nexport const WIZARD_CONTINUE = 'WIZARD_CONTINUE';\nexport const WIZARD_BACK = 'WIZARD_BACK';\nexport const WIZARD_SET_CURRENT_PAGE = 'WIZARD_SET_CURRENT_PAGE';\nexport const GET_BUTTON_DATA_SUCCESS = 'GET_BUTTON_DATA_SUCCESS';\nexport const GET_BUTTON_DATA_ERROR = 'GET_BUTTON_DATA_ERROR';\nexport const CREATE_BUTTON_SUCCESS = 'CREATE_BUTTON_SUCCESS';\nexport const CREATE_BUTTON_ERROR = 'CREATE_BUTTON_ERROR';\nexport const EDIT_BUTTON_SUCCESS = 'EDIT_BUTTON_SUCCESS';\nexport const EDIT_BUTTON_ERROR = 'EDIT_BUTTON_ERROR';\nexport const UPDATE_CODE_SNIPPET = 'UPDATE_CODE_SNIPPET';\nexport const SHOW_LOGIN_MODAL = 'SHOW_LOGIN_MODAL';\nexport const HIDE_LOGIN_MODAL = 'HIDE_LOGIN_MODAL';\nexport const SHOW_ACTIONABLE_ERROR_MODAL = 'SHOW_ACTIONABLE_ERROR_MODAL';\nexport const HIDE_ACTIONABLE_ERROR_MODAL = 'HIDE_ACTIONABLE_ERROR_MODAL';\nexport const SHOW_UNACTIONABLE_ERROR_MODAL = 'SHOW_UNACTIONABLE_ERROR_MODAL';\nexport const HIDE_UNACTIONABLE_ERROR_MODAL = 'HIDE_UNACTIONABLE_ERROR_MODAL';\nexport const SHOW_LEAVE_MODAL = 'SHOW_LEAVE_MODAL';\nexport const HIDE_LEAVE_MODAL = 'HIDE_LEAVE_MODAL';\nexport const SET_ERROR_LOADING_IMAGE = 'SET_ERROR_LOADING_IMAGE';\nexport const RESET_ERROR_LOADING_IMAGE = 'RESET_ERROR_LOADING_IMAGE';\nexport const OPEN_MOBILE_PREVIEW = 'OPEN_MOBILE_PREVIEW';\nexport const CLOSE_MOBILE_PREVIEW = 'CLOSE_MOBILE_PREVIEW';\nexport const UPDATE_IS_MOBILE = 'UPDATE_IS_MOBILE';\nexport const UPDATE_FLOW_SPEC = 'UPDATE_FLOW_SPEC';\nexport const UPDATE_BUSINESS_IMAGE_URLS = 'UPDATE_BUSINESS_IMAGE_URLS';\n\nconst transformClientFormatToServer = transformClientFormatToServerV3;\n\nexport function goToNextStep() {\n return {\n type: WIZARD_CONTINUE,\n };\n}\n\nexport function goToPreviousStep() {\n return {\n type: WIZARD_BACK,\n };\n}\n\nexport function setCurrentStep(stepNumber) {\n return {\n type: WIZARD_SET_CURRENT_PAGE,\n payload: stepNumber,\n };\n}\n\nexport function initializeWizard(button) {\n return {\n type: INITIALIZE_WIZARD,\n payload: button,\n };\n}\n\nexport function busy() {\n return {\n type: BUTTON_FACTORY_BUSY,\n };\n}\n\nexport function getButton(buttonId) {\n return (dispatch, getState) => {\n dispatch(busy());\n\n return fetcher(`/donate/api/buttons/${buttonId}`)\n .then((response) => response.json())\n .then((response) => {\n const button = _get(response, 'button');\n\n // When V3 is enabled, and a merchant is editing an V2\n // button, int_type should be default to 'C'\n const flowType = getButtonVariable(button, 'int_type');\n if (_isEmpty(flowType)) {\n button.button_variables.push({\n name: SERVER_BUTTON.FLOW_TYPE,\n value: 'C',\n });\n }\n\n dispatch({\n type: GET_BUTTON_DATA_SUCCESS,\n payload: button,\n });\n\n return button;\n })\n .catch((err) => {\n const error = _get(err, 'responseJSON.button');\n dispatch({\n type: GET_BUTTON_DATA_ERROR,\n payload: { error },\n });\n return err;\n });\n };\n}\n\nexport function saveButton(buttonData) {\n return (dispatch) => {\n if (buttonData.id) {\n return dispatch(updateButton(buttonData));\n }\n\n return dispatch(createButton(buttonData));\n };\n}\n\nexport function createButton(buttonData) {\n const buttonDataServerFormat = transformClientFormatToServer(buttonData);\n\n return (dispatch, getState) => {\n dispatch(busy());\n\n let resParams = {};\n return fetcher('/donate/api/buttons', {\n method: 'POST',\n body: JSON.stringify({\n button: buttonDataServerFormat,\n }),\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n dispatch({\n type: CREATE_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n }\n const button = _get(responseJson, 'button');\n button.merchantExperienceUrls = _get(\n responseJson,\n 'data.clientData.merchantExperienceUrls'\n );\n dispatch({\n type: CREATE_BUTTON_SUCCESS,\n payload: button,\n });\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n dispatch({\n type: CREATE_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n });\n };\n}\n\nexport function updateButton(buttonData) {\n const buttonDataServerFormat = transformClientFormatToServer(buttonData);\n\n return (dispatch, getState) => {\n dispatch(busy());\n\n let resParams = {};\n return fetcher(`/donate/api/buttons/${buttonData.id}`, {\n method: 'PUT',\n body: JSON.stringify({\n button: buttonDataServerFormat,\n }),\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n dispatch({\n type: EDIT_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n }\n const button = _get(responseJson, 'button');\n dispatch({\n type: EDIT_BUTTON_SUCCESS,\n payload: button,\n });\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n dispatch({\n type: EDIT_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n });\n };\n}\n\nexport function updateCodeSnippet(code) {\n return {\n type: UPDATE_CODE_SNIPPET,\n payload: code,\n };\n}\n\nexport function showLoginModal() {\n return {\n type: SHOW_LOGIN_MODAL,\n };\n}\n\nexport function hideLoginModal() {\n return {\n type: HIDE_LOGIN_MODAL,\n };\n}\n\nexport function showActionableErrorModal() {\n return {\n type: SHOW_ACTIONABLE_ERROR_MODAL,\n };\n}\n\nexport function hideActionableErroModal() {\n return {\n type: HIDE_ACTIONABLE_ERROR_MODAL,\n };\n}\n\nexport function showUnactionableErrorModal() {\n return {\n type: SHOW_UNACTIONABLE_ERROR_MODAL,\n };\n}\n\nexport function hideUnactionableErrorModal() {\n return {\n type: HIDE_UNACTIONABLE_ERROR_MODAL,\n };\n}\n\nexport function showLeaveModal() {\n return {\n type: SHOW_LEAVE_MODAL,\n };\n}\n\nexport function hideLeaveModal() {\n return {\n type: HIDE_LEAVE_MODAL,\n };\n}\n\nexport function destroyForm() {\n return (dispatch) => {\n const form = BTN_FACTORY_V3_FORM;\n dispatch(destroy(form));\n };\n}\n\nexport function setErrorLoadingLogoImage() {\n return {\n type: SET_ERROR_LOADING_IMAGE,\n };\n}\n\nexport function resetErrorLoadingLogoImage() {\n return {\n type: RESET_ERROR_LOADING_IMAGE,\n };\n}\n\nexport function openMobilePreview() {\n return {\n type: OPEN_MOBILE_PREVIEW,\n };\n}\n\nexport function closeMobilePreview() {\n return {\n type: CLOSE_MOBILE_PREVIEW,\n };\n}\n\nexport function updateIsMobile(isMobile) {\n return {\n type: UPDATE_IS_MOBILE,\n payload: isMobile,\n };\n}\n\nexport function updateFlowSpec(flowSpec) {\n return {\n type: UPDATE_FLOW_SPEC,\n payload: flowSpec,\n };\n}\n\nexport function uploadImage(imageUrl) {\n return () => {\n let resParams = {};\n return fetcher('/donate/api/imageUpload', {\n method: 'POST',\n body: JSON.stringify({\n src: imageUrl,\n }),\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJson: responseJson.success,\n ...resParams,\n };\n return error;\n }\n const url = _get(responseJson, 'url');\n return { src: url.imageUrl, ok: resParams.ok, success: url.success };\n })\n .catch((error) => {\n return error;\n });\n };\n}\n\nexport function updateBusinessProfileLogo(imageUrl) {\n return () => {\n let resParams = {};\n return fetcher('/donate/api/updateBusinessProfile', {\n method: 'PUT',\n body: JSON.stringify({\n url: imageUrl,\n }),\n })\n .then((response) => {\n resParams = {\n resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n success: responseJson.success,\n ...resParams,\n };\n return error;\n }\n return { ok: resParams.ok, success: responseJson.success };\n })\n .catch((error) => {\n return error;\n });\n };\n}\n\nexport function updateBusinessImageUrls(url) {\n return {\n type: UPDATE_BUSINESS_IMAGE_URLS,\n url,\n };\n}\n","import {\n BUTTON_FACTORY_BUSY,\n INITIALIZE_WIZARD,\n WIZARD_CONTINUE,\n WIZARD_BACK,\n WIZARD_SET_CURRENT_PAGE,\n CREATE_BUTTON_SUCCESS,\n CREATE_BUTTON_ERROR,\n EDIT_BUTTON_SUCCESS,\n EDIT_BUTTON_ERROR,\n GET_BUTTON_DATA_SUCCESS,\n GET_BUTTON_DATA_ERROR,\n UPDATE_CODE_SNIPPET,\n SHOW_LOGIN_MODAL,\n HIDE_LOGIN_MODAL,\n SHOW_ACTIONABLE_ERROR_MODAL,\n HIDE_ACTIONABLE_ERROR_MODAL,\n SHOW_UNACTIONABLE_ERROR_MODAL,\n HIDE_UNACTIONABLE_ERROR_MODAL,\n SHOW_LEAVE_MODAL,\n HIDE_LEAVE_MODAL,\n SET_ERROR_LOADING_IMAGE,\n RESET_ERROR_LOADING_IMAGE,\n} from '../actions/actionsButtonFactory';\nimport {\n getNextStep,\n getOptionsForLanguageField,\n getPreviousStep,\n WIZARD_TOTAL_STEPS,\n} from '../utils/buttonFactoryUtils';\nimport { transformServerFormatToClient } from '../lib/buttonModel';\nimport { getServerProps } from '../utils/serverProps';\nimport _get from 'lodash/get';\n\nconst settingsLogoUrl = getSettingsLogoUrl();\n\nconst getDefaultValueForLanguage = () => {\n const serverProps = getServerProps();\n const countryAndLanguageDetails = _get(\n serverProps,\n 'countryAndLanguageDetails'\n );\n const selectedCountry = _get(serverProps, 'selectedCountry');\n const languages = getOptionsForLanguageField(\n countryAndLanguageDetails,\n selectedCountry\n );\n // Get first language\n let language = _get(languages, '[0].value');\n return language || 'en';\n};\n\nexport const LOGO_TARGET_BUTTON = 'BUTTON';\nexport const LOGO_TARGET_PROFILE = 'PROFILE';\nexport const LOGO_TARGET_NOLOGO = 'NOLOGO';\n\nexport const defaultButton = {\n accountIdentifierType: 'merchantAccountId',\n allowPrograms: 'No',\n amountType: 'variable',\n amountValue: '',\n business: getServerProps().accountIdentifier.email,\n buttonSize: 'large',\n countryCode: getServerProps().country,\n coverFeesEnabled: 'yes',\n extraVariables: {},\n extraVariablesView: '',\n itemNumber: '',\n language: getDefaultValueForLanguage(),\n listPrograms: 'no',\n logoTarget: settingsLogoUrl ? LOGO_TARGET_PROFILE : LOGO_TARGET_NOLOGO,\n logoUrl: '',\n merchantAmount1: '',\n merchantAmount2: '',\n merchantAmount3: '',\n noNote: 'no',\n noShipping: 'yes',\n organizationName: getServerProps().organizationName,\n programNames: [],\n purpose: '',\n receiverCurrency: getServerProps().primaryCurrency[0],\n recurringEnabled: 'yes',\n settingsLogoUrl,\n showAcceptedCardLogos: false,\n uploadNewLogo: 'no',\n usePaypalButtonStyle: 'yes',\n version: '2.0', // just to differntiate the experience where button was created\n};\n\nexport const initialState = {\n formattedButton: defaultButton,\n};\n\nconst defaultState = {\n currentStep: 1,\n totalSteps: WIZARD_TOTAL_STEPS,\n busy: true, // We fetch button on load, hence set this to busy\n customVariable: '',\n waiting: false,\n showLoginModal: false,\n errorLoadingLogoImage: false,\n showUnactionableErrorModal: false,\n showActionableErrorModal: false,\n showLeaveModal: false,\n};\n\nfunction getFormattedButton(payload) {\n // organizationName is not stored in BF service\n // fetching from server to make sure it gets pre-filled when user is editing/duplicating a button\n return Object.assign({}, transformServerFormatToClient(payload), {\n organizationName: getServerProps().organizationName,\n language: payload.language,\n });\n}\nfunction getSettingsLogoUrl() {\n const merchantExperienceUrl = _get(\n getServerProps(),\n 'merchantExperienceUrls.logoUrl'\n );\n const businessImageUrl = _get(getServerProps(), 'businessImageUrls.url');\n\n return merchantExperienceUrl ? merchantExperienceUrl : businessImageUrl;\n}\n\nexport default function buttonFactory(state = defaultState, action) {\n switch (action.type) {\n case BUTTON_FACTORY_BUSY: {\n return {\n ...state,\n busy: true,\n };\n }\n\n case INITIALIZE_WIZARD: {\n const button = action.payload;\n let clientSideState = initialState;\n if (button) {\n clientSideState = {\n formattedButton: getFormattedButton(button),\n };\n }\n\n return {\n ...state,\n button: action.payload,\n ...clientSideState,\n busy: false,\n };\n }\n\n case WIZARD_CONTINUE: {\n const { currentStep } = state;\n\n return {\n ...state,\n currentStep: getNextStep(currentStep),\n };\n }\n\n case WIZARD_BACK: {\n const { currentStep } = state;\n\n return {\n ...state,\n currentStep: getPreviousStep(currentStep),\n };\n }\n\n case WIZARD_SET_CURRENT_PAGE: {\n return {\n ...state,\n currentStep: action.payload,\n };\n }\n\n case CREATE_BUTTON_SUCCESS: {\n return {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton(action.payload),\n busy: false,\n error: null,\n isButtonCreated: true,\n };\n }\n\n case CREATE_BUTTON_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n };\n }\n\n case EDIT_BUTTON_SUCCESS: {\n return {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton(action.payload),\n busy: false,\n error: null,\n };\n }\n\n case EDIT_BUTTON_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n };\n }\n\n case GET_BUTTON_DATA_SUCCESS: {\n const newState = {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton(action.payload),\n busy: false,\n };\n return newState;\n }\n\n case GET_BUTTON_DATA_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n };\n }\n\n case UPDATE_CODE_SNIPPET: {\n return {\n ...state,\n customVariable: action.payload,\n };\n }\n\n case SHOW_LOGIN_MODAL: {\n return {\n ...state,\n showLoginModal: true,\n };\n }\n\n case HIDE_LOGIN_MODAL: {\n return {\n ...state,\n showLoginModal: false,\n };\n }\n\n case SHOW_ACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showActionableErrorModal: true,\n };\n }\n\n case HIDE_ACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showActionableErrorModal: false,\n };\n }\n\n case SHOW_UNACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showUnactionableErrorModal: true,\n };\n }\n\n case HIDE_UNACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showUnactionableErrorModal: false,\n };\n }\n\n case SHOW_LEAVE_MODAL: {\n return {\n ...state,\n showLeaveModal: true,\n };\n }\n\n case HIDE_LEAVE_MODAL: {\n return {\n ...state,\n showLeaveModal: false,\n };\n }\n\n case SET_ERROR_LOADING_IMAGE: {\n return {\n ...state,\n errorLoadingLogoImage: true,\n };\n }\n\n case RESET_ERROR_LOADING_IMAGE: {\n return {\n ...state,\n errorLoadingLogoImage: false,\n };\n }\n\n default:\n return state;\n }\n}\n","import { addClass, removeClass } from '../../utility/domUtils';\n\nexport function showSpinner() {\n addClass('#button-factory-spinner', ['show']);\n}\n\nexport function hideSpinner() {\n removeClass('#button-factory-spinner', ['show']);\n}\n","import { init } from 'pp-react-l10n';\nconst locals =\n JSON.parse(document.getElementById('localeMessages').innerHTML) || {};\nconst content = {\n locals,\n};\ninit({ content });\n\nlet allLocaleMessages;\n\nconst getLocaleMessages = (propertyName) => {\n if (!propertyName) {\n console.warn('Missing template name');\n }\n try {\n if (!allLocaleMessages) {\n allLocaleMessages = JSON.parse(\n document.getElementById('localeMessages').innerHTML || {}\n );\n }\n return allLocaleMessages[propertyName] || allLocaleMessages;\n } catch (e) {\n console.warn('Please attach locales to DOM');\n return {};\n }\n};\n\nexport default getLocaleMessages;\n","var map = {\n\t\"./\": \"EeZX\",\n\t\"./common\": \"U/bi\",\n\t\"./common.js\": \"U/bi\",\n\t\"./index\": \"EeZX\",\n\t\"./index.js\": \"EeZX\",\n\t\"./msgeo\": \"efw1\",\n\t\"./msgeo.js\": \"efw1\",\n\t\"./pp_cn\": \"ZiC+\",\n\t\"./pp_cn.js\": \"ZiC+\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"X4ip\";","import React from 'react';\nimport PropTypes from 'prop-types';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { Divider, Switch, Badge } from '@paypalcorp/pp-react'; // For some reason if we import it from pp-react-switch, we don't get the inline and secondary label feature\nimport { shouldShowBadge } from '../../utilsV3/badgeUtils';\n\nconst { toggle = {} } = getLocaleMessages('buttonsV3/switches');\n\nexport const renderSwitchComponent = (props) => {\n if (props.reversed) {\n return ;\n }\n return ;\n};\n\nrenderSwitchComponent.propTypes = {\n isChecked: PropTypes.bool,\n reversed: PropTypes.bool,\n};\n\n// onToggle and isChecked props should be passed down by parent component to use switch value\nconst SwitchPanel = (props) => {\n const { title, subTitle, isChecked, noDivider, input, value, id, showBadge } =\n props;\n const badgeContent = shouldShowBadge(showBadge);\n\n return (\n <>\n {noDivider ? null : }\n input.onChange(value === 'yes' ? 'no' : 'yes')}\n value={value}\n labelIcon={\n badgeContent && (\n \n {badgeContent}\n \n )\n }\n />\n \n );\n};\n\nSwitchPanel.propTypes = {\n input: PropTypes.object,\n isChecked: PropTypes.bool,\n subTitle: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n title: PropTypes.string,\n value: PropTypes.string,\n};\n\nexport default SwitchPanel;\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { BodyText, Col, HeadingText, Row } from '@paypalcorp/pp-react';\nimport {\n getCurrencyParts,\n getCurrencyPartByType,\n formatAmountToOnlyNumbers,\n MIN_INPUT_WIDTH,\n DEFAULT_INPUT_FONTSIZE,\n getInputWidth,\n getFontSize,\n} from '../../../../utils/amountUtils';\n\nconst CURRENCY_PARTS_TYPE_VALUE = 'value';\nconst CURRENCY_PARTS_TYPE_SYMBOL = 'symbol';\n\nconst SingleAmount = ({ amount, currencyCode, isMobile }) => {\n const [inputFontSize, setInputFontSize] = useState(DEFAULT_INPUT_FONTSIZE);\n const [amountWidth, setAmountWidth] = useState(0);\n\n const currencyParts = getCurrencyParts(\n formatAmountToOnlyNumbers(amount),\n currencyCode\n ),\n [firstParts = {}] = currencyParts,\n isSymbolDisplayedRightSide = firstParts.type !== CURRENCY_PARTS_TYPE_SYMBOL,\n currencyAmount = getCurrencyPartByType(\n currencyParts,\n CURRENCY_PARTS_TYPE_VALUE\n ),\n currencySymbol = getCurrencyPartByType(\n currencyParts,\n CURRENCY_PARTS_TYPE_SYMBOL\n ),\n amountClassLabel = isSymbolDisplayedRightSide\n ? 'left-align'\n : 'right-align';\n\n const measuredRef = useCallback(\n (node) => {\n if (node !== null) {\n let inputWidth;\n\n try {\n inputWidth = getInputWidth(node, amount);\n } catch (e) {\n inputWidth = MIN_INPUT_WIDTH;\n }\n\n setAmountWidth(inputWidth);\n setInputFontSize(getFontSize(amount, isMobile));\n }\n },\n [amount]\n );\n\n return (\n \n \n
\n {currencySymbol && !isSymbolDisplayedRightSide && (\n \n {currencySymbol}\n \n )}\n \n {currencyAmount}\n \n\n {currencySymbol && isSymbolDisplayedRightSide && (\n \n {currencySymbol}\n \n )}\n
\n
\n \n {currencyCode}\n \n \n );\n};\n\nSingleAmount.propTypes = {\n amount: PropTypes.string,\n currencyCode: PropTypes.string,\n isMobile: PropTypes.bool,\n};\n\nexport default SingleAmount;\n","import PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\nimport { HeadingText } from '@paypalcorp/pp-react';\nimport { getDonateLocaleAPIFormat } from '../utils/localeUtils.js';\n\nconst getRemainingTime = function (millis) {\n const remainingTimeOptions = { minute: '2-digit', second: '2-digit' };\n\n const remainingTime = new Date(0);\n remainingTime.setMilliseconds(millis);\n\n return remainingTime.toLocaleTimeString(\n getDonateLocaleAPIFormat(),\n remainingTimeOptions\n );\n};\n\nconst CountdownTimer = (props) => {\n const { milliseconds = 1 * 60 * 1000 } = props;\n\n const [timeLeft, setTimeLeft] = useState(milliseconds);\n\n useEffect(() => {\n if (timeLeft > 0 && !props.pause) {\n const intervalId = setInterval(() => {\n setTimeLeft(timeLeft - 1000);\n }, 1000);\n return () => clearInterval(intervalId);\n } else if (timeLeft === 0) {\n props.onTimeout(true);\n }\n }, [timeLeft, props.pause]);\n\n return (\n \n {getRemainingTime(timeLeft)}\n \n );\n};\n\nCountdownTimer.propTypes = {\n milliseconds: PropTypes.number,\n pause: PropTypes.bool,\n styles: PropTypes.object,\n onTimeout: PropTypes.func,\n};\n\nexport default CountdownTimer;\n","import getStore from '../store/configureStore';\nimport _get from 'lodash/get';\n\nexport function getDonateLocaleAPIFormat() {\n const reduxStore = getStore();\n const locale = _get(reduxStore.getState(), 'application.locale', 'en_US');\n return locale.replace('_', '-');\n}\n","import PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\nimport { error } from '@paypalcorp/pp-react';\nimport { useHistory } from 'react-router-dom';\nimport CountdownTimer from './CountdownTimer';\nimport BasicModal from '../componentsV3/modals/BasicModal';\nimport { fetcher } from '../../utility/domUtils';\nimport getLocaleMessages from '../utils/localesMessages';\nimport { ACTION, FPTI_SPEC } from '../utilsV3/fptiConstants';\nimport { trackEventWithData } from '../utilsV3/analytics';\n\nconst { dialogHeader, dialogMessage, continueButton } = getLocaleMessages(\n 'buttonsV3/extendSession'\n);\n\nconst ExtendSession = (props) => {\n const {\n confirmTime = 13 * 60 * 1000,\n expireTime = 15 * 60 * 1000,\n isLoggedIn = false,\n } = props;\n\n let sessionTimeout;\n\n const history = useHistory();\n\n const [isOpen, setIsOpen] = useState(false);\n const [isTimeout, setIsTimeout] = useState(false);\n const [isSending, setIsSending] = useState(false);\n const [extendSessionCalledAt, setExtendSessionCalledAt] = useState(\n new Date()\n );\n\n function logoutUserAndForceLogin() {\n const current_location = window.location.href;\n const returnUri = current_location.substr(\n current_location.indexOf('/buttons')\n );\n const renderURL = '/donate/buttons/login?returnUri=' + returnUri;\n fetcher('/donate/sessionlogout').finally(() => {\n history.push(renderURL);\n location.reload();\n });\n }\n\n useEffect(() => {\n // If the user is not logged in we should never show the modal\n if (!isLoggedIn) return;\n\n sessionTimeout = setTimeout(() => {\n if (!isOpen) {\n setIsOpen(true);\n }\n }, confirmTime);\n\n const fetchCallListener = () => {\n clearTimeout(sessionTimeout);\n\n sessionTimeout = setTimeout(() => {\n if (!isOpen) {\n setIsOpen(true);\n }\n }, confirmTime);\n };\n document.addEventListener('fetchCall', fetchCallListener);\n\n // Clear window events if the component is unmounted\n return () => {\n document.removeEventListener('fetchCall', fetchCallListener);\n clearTimeout(sessionTimeout);\n };\n }, []);\n\n useEffect(() => {\n if (isTimeout) {\n logoutUserAndForceLogin();\n }\n }, [isTimeout]);\n\n const requestExtendSession = async () => {\n // This function is called when the user click Extend Session and when the modal closes\n // Since the modal is closed after extending the session we need the logic below to prevent\n // duplicated extendSession call\n trackEventWithData(FPTI_SPEC.ALERT_MODAL_CONFIRM_CL, {\n action: ACTION.EXTEND_SESSION,\n step: props.currentStep,\n link: 'extend_session',\n });\n\n const now = new Date();\n const seconds = (now.getTime() - extendSessionCalledAt.getTime()) / 1000;\n if (seconds < 10) return;\n setExtendSessionCalledAt(new Date());\n\n setIsSending(true);\n await fetcher('/donate/api/extendSession')\n .then(() => {\n setIsOpen(false);\n })\n .catch(() => {\n logoutUserAndForceLogin();\n });\n setIsSending(false);\n };\n\n const fptiSpec = {\n impression: FPTI_SPEC.ALERT_MODAL_IM,\n data: {\n action: ACTION.EXTEND_SESSION,\n step: props.currentStep,\n },\n };\n\n return (\n \n \n \n );\n};\n\nExtendSession.propTypes = {\n isLoggedIn: PropTypes.bool,\n confirmTime: PropTypes.number,\n expireTime: PropTypes.number,\n currentStep: PropTypes.number,\n};\n\nexport default ExtendSession;\n","import {\n isSdkMode,\n isPopupMode,\n isFullPageRedirectionMode,\n} from '../utility/inContextDonation';\nimport { FPTI_TAGS, PAGE_SPEC } from './fptiConstants';\nimport { normalizeNumber } from '../utility/formator';\nimport templateData from '../utility/getTemplateData';\nimport {\n isAtLandingPage,\n isOptInCoverFee,\n} from '../components/coverFee/feeUtils';\nimport AppStore from '../stores/AppStore';\nimport _isEmpty from 'lodash/isEmpty';\nimport _get from 'lodash/get';\nimport _find from 'lodash/find';\nimport {\n isExternalFlow,\n isGNC,\n isPPFundraising,\n} from '../utility/externalIntegrationUtils';\nimport { EVENT_NAME, FPTI_PRODUCT } from '../utility/constants';\nimport { isLoggedInUser } from '../utility/authUtils';\n\nconst {\n anonymousEnabled,\n coverFeeEnabled,\n donationAmount,\n donationCode,\n donationName,\n donorIpCountry,\n feeAmount,\n feeCurr,\n feePayer,\n fptPageName,\n npid,\n onboardingEnabled,\n product,\n productId,\n token,\n integrationIdentifier,\n recurringEnabled,\n} = templateData;\n\nexport const getUiType = () => {\n if (!isSdkMode()) {\n return 'full_page';\n }\n\n if (isPopupMode()) {\n return 'popup';\n }\n\n if (isFullPageRedirectionMode()) {\n return 'popup_blocked';\n }\n};\n\nexport const getDonationAmount = () => {\n const amount = AppStore.getDonationAmount() || donationAmount;\n return {\n [FPTI_TAGS.AMOUNT]: normalizeNumber(amount),\n };\n};\n\nexport const getFeeDataFromTemplateData = () => {\n return {\n ...(feePayer\n ? {\n [FPTI_TAGS.FEE_PAYER]: feePayer,\n [FPTI_TAGS.FEE_AMOUNT]: feeAmount,\n [FPTI_TAGS.FEE_CURRENCY]: feeCurr,\n }\n : {}),\n };\n};\n\nexport const getFeeData = () => {\n return {\n ...(coverFeeEnabled\n ? {\n [FPTI_TAGS.FEE_PAYER]: isOptInCoverFee() ? 'consumer' : 'merchant',\n [FPTI_TAGS.FEE_AMOUNT]: AppStore.getFeeAmount(),\n [FPTI_TAGS.FEE_CURRENCY]: AppStore.getDonationCode(),\n }\n : {}),\n };\n};\n\nexport const getAnonymousStatus = () => {\n return {\n ...(anonymousEnabled\n ? {\n [FPTI_TAGS.NONANONYMOUS]:\n AppStore.getAnonymousStatus() === 'unchecked',\n }\n : {}),\n };\n};\n\nexport const getNoteData = (data) => {\n return {\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.NOTE_ALLOWED]: data?.noteFieldDisplayed || false,\n [FPTI_TAGS.NOTE_ADDED]: !_isEmpty(AppStore.getDonationNote()),\n }\n : {}),\n };\n};\n\nexport const getRecurringStatus = () => {\n return {\n ...(recurringEnabled\n ? { [FPTI_TAGS.RECURRING]: AppStore.getDonationRecurring() === 'checked' }\n : {}),\n };\n};\n\nexport const getLandingPageData = ({ noteFieldDisplayed }) => {\n return {\n ...getFeeData(),\n ...getDonationAmount(),\n ...getAnonymousStatus(),\n ...getNoteData({ noteFieldDisplayed }),\n ...getRecurringStatus(),\n ...PAGE_SPEC.LANDING_PAGE,\n };\n};\n\nexport const getThreeDSData = () => {\n const fundingOpts = AppStore.getFundingOptions();\n const contingencies = _get(fundingOpts, 'contingencies') || [];\n const threeDSContingency =\n _find(contingencies, { action: '3D_SECURE_DATA_COLLECTION_REQUIRED' }) ||\n {};\n\n return {\n [FPTI_TAGS.FI_ID]: _get(fundingOpts, 'id'),\n [FPTI_TAGS.FI_TYPE]: _get(fundingOpts, 'sources[0].payment_card.type'),\n [FPTI_TAGS.FI_NETWORK]: _get(\n fundingOpts,\n 'sources[0].payment_card.network'\n ),\n [FPTI_TAGS.FI_OPERATION]: 'add_card',\n [FPTI_TAGS.IS_3DS_ELIGIBLE]: true,\n [FPTI_TAGS.THREE_DS_VERSION]: '3DS2.0',\n [FPTI_TAGS.THREE_DS_REF_ID]: _get(\n threeDSContingency,\n 'three_ds_reference_id'\n ),\n };\n};\n\nexport const getExternalFlowData = () => {\n return {\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.PRODUCT]: FPTI_PRODUCT,\n [FPTI_TAGS.FLOW]: product,\n [FPTI_TAGS.INTEGRATION_IDENTIFIER]: integrationIdentifier,\n [FPTI_TAGS.DONOR_IP_COUNTRY]: donorIpCountry,\n [FPTI_TAGS.ACCOUNT_TYPE]: isLoggedInUser() ? 'member' : 'guest',\n [FPTI_TAGS.CURRENCY]: donationCode,\n ...(!_isEmpty(productId)\n ? {\n [FPTI_TAGS.CAMPAIGN_ID]: productId,\n }\n : {}),\n ...(!_isEmpty(npid)\n ? {\n [FPTI_TAGS.NPID]: npid,\n }\n : {}),\n ...(isGNC() || isPPFundraising()\n ? {\n [FPTI_TAGS.CHARITY_NAME]: donationName,\n }\n : {}),\n }\n : {}),\n };\n};\n\nexport const getToken = () => {\n return {\n [FPTI_TAGS.TOKEN]: token,\n };\n};\n\nexport const updateGlobalRespDuration = (respDuration) => {\n const globalRespDuration = window.fpti.resp_duration || {};\n window.fpti.resp_duration = Object.assign(\n {},\n globalRespDuration,\n respDuration\n );\n};\n\nexport const updateGlobalFPTI = (data) => {\n window.fpti = {\n ...window.fpti,\n ...data,\n };\n};\n\nexport const getDefaultPageSpec = () => {\n const url = window.location.href;\n const isOnboardingFlow = fptPageName === 'guestULSignUp';\n\n const pageSpec = _find(PAGE_SPEC, (page) => {\n return page.url && url.indexOf(page.url) > -1;\n });\n if (pageSpec) {\n return pageSpec;\n }\n\n if (url.indexOf('/donate/guest/confirmation') > -1) {\n return isOnboardingFlow\n ? PAGE_SPEC.ONBOARDING_GUEST_SUCCESS_PAGE\n : PAGE_SPEC.GUEST_SUCCESS_PAGE;\n } else if (url.indexOf('/donate/guest/pending') > -1) {\n return isOnboardingFlow\n ? PAGE_SPEC.ONBOARDING_GUEST_PENDING_PAGE\n : PAGE_SPEC.GUEST_PENDING_PAGE;\n } else if (!isAtLandingPage()) {\n return onboardingEnabled\n ? PAGE_SPEC.ONBOARDING_GUEST_FORM\n : PAGE_SPEC.GUEST_FORM;\n } else if (url.indexOf('/donate') > -1) {\n return PAGE_SPEC.LANDING_PAGE;\n }\n};\n\nexport const getConfirmationData = (confirmationData) => {\n return {\n [FPTI_TAGS.AMOUNT]: confirmationData?.postBackData?.mc_gross,\n [FPTI_TAGS.CURRENCY]: confirmationData?.postBackData?.mc_currency,\n [FPTI_TAGS.TXN_ID]: confirmationData?.confirmationNumber || '',\n ...(confirmationData?.orderId\n ? {\n [FPTI_TAGS.ORDER_ID]: confirmationData.orderId,\n }\n : {}),\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.EVENT_NAME]: confirmationData?.isOfacPending\n ? EVENT_NAME.DW_GIVING_PAYMENT_PENDING_SCREEN_SHOWN\n : EVENT_NAME.DW_GIVING_PAYMENT_SUCCESS_SCREEN_SHOWN,\n }\n : {}),\n };\n};\n","let analytics = window?.PAYPAL?.analytics?.instance;\n\n// Start client side error tracking\nwindow?.PAYPAL?.analytics?.startClientErrorTracking();\n\nexport const trackEventWithData = (spec = {}, additionalData = {}) => {\n const fptiData = {\n ...spec.data,\n ...additionalData,\n tsrce: 'donatenodeweb',\n };\n // ref: https://github.paypal.com/pages/Tracking-R/client-side-instrumentation/docs/fptiAnalytics.Analytics.html#recordEvent\n // the 3rd param is set to false meaning the data payload won't be merged\n // with window.fpti object\n analytics?.recordEvent(spec.event_name, fptiData, false);\n};\n\nexport const trackEventWithGlobalData = (spec = {}, additionalData = {}) => {\n const fptiData = {\n ...spec.data,\n ...additionalData,\n tsrce: 'donatenodeweb',\n };\n analytics?.recordEvent(spec.event_name, fptiData, true);\n};\n\nexport const trackPageLoad = (globalData, onceData, fromSetup = false) => {\n globalData.tsrce = 'donatenodeweb';\n analytics?.recordImpression({ data: globalData }, onceData, fromSetup);\n};\n\nexport const trackClick = (data) => {\n data.tsrce = 'donatenodeweb';\n analytics?.recordClick({ data });\n};\n\nexport const trackError = (data) => {\n data.tsrce = 'donatenodeweb';\n analytics?.recordError({ data });\n};\n","import templateData from '../utility/getTemplateData';\nimport { isExternalFlow } from '../utility/externalIntegrationUtils';\nimport { EVENT_NAME, SCREEN_NAME } from '../utility/constants';\nimport { FPTI_TAGS, LINK_NAME, PAGE_SPEC } from './fptiConstants';\nimport {\n getAnonymousStatus,\n getConfirmationData,\n getDefaultPageSpec,\n getDonationAmount,\n getExternalFlowData,\n getFeeData,\n getFeeDataFromTemplateData,\n getLandingPageData,\n getNoteData,\n getRecurringStatus,\n getThreeDSData,\n getToken,\n getUiType,\n} from './helper';\nimport { trackPageLoad, trackClick, trackError } from './analytics';\nimport isNna from '../utility/nna';\nimport { isAtLandingPage } from '../components/coverFee/feeUtils';\n\nconst {\n country,\n donationAmountEditable,\n onboardingEnabled,\n selectedPresetButtonId,\n} = templateData;\n\nexport const trackLandingPageIM = (data) => {\n const shouldTrackExternalFlowData = isExternalFlow();\n const onceData = {\n ...getAnonymousStatus(),\n ...getNoteData(data),\n ...(shouldTrackExternalFlowData\n ? {\n [FPTI_TAGS.EVENT_NAME]:\n EVENT_NAME.DW_GIVING_DONATE_SETUP_SCREEN_SHOWN,\n }\n : {}),\n ...(selectedPresetButtonId\n ? {\n [FPTI_TAGS.SELECTED_PRESET_BUTTON_ID]: selectedPresetButtonId,\n }\n : {}),\n ...getFeeDataFromTemplateData(),\n ...getDonationAmount(),\n };\n\n const globalData = {\n [FPTI_TAGS.UI_TYPE]: getUiType(),\n [FPTI_TAGS.AMOUNT_EDIT_ALLOWED]: donationAmountEditable,\n ...getExternalFlowData(),\n ...PAGE_SPEC.LANDING_PAGE,\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackGuestFormIM = ({ isOnboarding = false } = {}) => {\n const onceData = {\n ...getDonationAmount(),\n ...getRecurringStatus(),\n ...(isExternalFlow()\n ? { [FPTI_TAGS.EVENT_NAME]: EVENT_NAME.DW_GIVING_GUEST_FORM_SCREEN_SHOWN }\n : {}),\n ...(isNna(country) && !isOnboarding\n ? { [FPTI_TAGS.OFFER_TYPE]: 'nna' }\n : {}),\n };\n const globalData = {\n ...(isOnboarding\n ? { ...PAGE_SPEC.ONBOARDING_GUEST_FORM }\n : { ...PAGE_SPEC.GUEST_FORM }),\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackMemberReviewPageIM = ({ status, statusCode }) => {\n const onceData = {};\n const globalData = {\n [FPTI_TAGS.STATUS]: status,\n [FPTI_TAGS.STATUS_CODE]: statusCode,\n ...PAGE_SPEC.MEMBER_REVIEW_PAGE,\n ...getUiType(),\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackErrorIM = ({\n errorCode,\n errorMessage,\n fieldName,\n pageSpec = getDefaultPageSpec(),\n additionalData,\n}) => {\n const data = {\n ...(isExternalFlow()\n ? {\n eventName: EVENT_NAME.DW_GIVING_FAILED_CUSTOMER_INTERACTION_OCCURRED,\n screen: isAtLandingPage()\n ? SCREEN_NAME.DW_GIVING_DONATE_SETUP_SCREEN\n : SCREEN_NAME.DW_GIVING_DONATE_GUEST_FORM_SCREEN,\n }\n : {}),\n [FPTI_TAGS.ERR_FIELD]: fieldName,\n [FPTI_TAGS.ERR_CODE]: errorCode,\n [FPTI_TAGS.ECCD]: errorCode,\n [FPTI_TAGS.ERPG]: errorMessage,\n [FPTI_TAGS.ERR_DESC]: errorMessage,\n ...pageSpec,\n ...getDonationAmount(),\n ...additionalData,\n };\n trackError(data);\n};\n\nexport const trackThreeDSIframeIM = ({\n threeDSRespDuration,\n confirmationStatus,\n}) => {\n const globalRespDuration = window.fpti.resp_duration || {};\n const globalData = {\n ...getThreeDSData(),\n ...(onboardingEnabled\n ? { ...PAGE_SPEC.THREE_DS_IFRAME_ONBRD }\n : { ...PAGE_SPEC.THREE_DS_IFRAME }),\n [FPTI_TAGS.THREE_DS_RESP_DURATION]: Object.assign(\n {},\n globalRespDuration,\n threeDSRespDuration\n ),\n [FPTI_TAGS.CHALLENGE_STATUS]: confirmationStatus,\n };\n const onceData = {};\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackConfirmationPageIM = ({\n isSignUp,\n pageSpec,\n flow,\n confirmationData,\n}) => {\n const globalData = {\n [FPTI_TAGS.IS_SIGNUP]: isSignUp,\n [FPTI_TAGS.ACCOUNT_TYPE]: flow,\n ...getExternalFlowData(),\n ...getConfirmationData(confirmationData),\n ...getToken(),\n ...pageSpec,\n };\n const onceData = {};\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackCaptureOrderPageIM = ({ flow, confirmationData }) => {\n const pgrp = PAGE_SPEC.CAPTURE_ORDER_PAGE.pgrp.replace('{flow}', flow);\n const onceData = {\n [FPTI_TAGS.PAGE_NAME]: `${pgrp}:web::`,\n [FPTI_TAGS.PAGE_GROUP]: pgrp,\n };\n const globalData = {\n [FPTI_TAGS.ACCOUNT_TYPE]: flow,\n ...getToken(),\n ...getExternalFlowData(),\n ...getConfirmationData(confirmationData),\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackErrorPageIM = ({ pageSpec, errorCode, additionalData }) => {\n const onceData = {\n [FPTI_TAGS.ERR_CODE]: errorCode,\n };\n const globalData = {\n ...pageSpec,\n ...additionalData,\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackPageIM = ({ pageSpec, additionalData }) => {\n const onceData = {\n ...additionalData,\n };\n const globalData = {\n ...pageSpec,\n };\n\n trackPageLoad(globalData, onceData);\n};\n\nexport const trackAnonymousCheckboxClick = (status) => {\n const data = {\n [FPTI_TAGS.LINK]: LINK_NAME.ANONYMOUS_CHECKBOX,\n [FPTI_TAGS.CHECKBOX]: status,\n [FPTI_TAGS.NONANONYMOUS]: !status,\n [FPTI_TAGS.EVENT_NAME]: status\n ? EVENT_NAME.DW_GIVING_DONATE_SETUP_SHARE_CONTACT_CHECK_PRESSED\n : EVENT_NAME.DW_GIVING_DONATE_SETUP_SHARE_CONTACT_UNCHECK_PRESSED,\n ...getDonationAmount(),\n ...PAGE_SPEC.LANDING_PAGE,\n };\n trackClick(data);\n};\n\nexport const trackCoverFeeCheckboxClick = (status) => {\n const data = {\n [FPTI_TAGS.LINK]: LINK_NAME.COVER_FEE_CHECKBOX,\n [FPTI_TAGS.CHECKBOX]: status,\n ...getFeeData(),\n ...getDonationAmount(),\n ...PAGE_SPEC.LANDING_PAGE,\n };\n trackClick(data);\n};\n\nexport const trackDonateWithCardClick = ({ noteFieldDisplayed }) => {\n const data = {\n [FPTI_TAGS.LINK]: 'donateWithCard',\n ...getLandingPageData({ noteFieldDisplayed }),\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.EVENT_NAME]:\n EVENT_NAME.DW_GIVING_DONATE_SETUP_DONATE_WITH_CARD_PRESSED,\n }\n : {}),\n };\n trackClick(data);\n};\n\nexport const trackDonateWithPayPalClick = ({ noteFieldDisplayed }) => {\n const data = {\n ...getLandingPageData({ noteFieldDisplayed }),\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.EVENT_NAME]:\n EVENT_NAME.DW_GIVING_DONATE_SETUP_NEXT_PRESSED,\n }\n : {}),\n [FPTI_TAGS.LINK]: 'donateWithPayPal',\n };\n trackClick(data);\n};\n\nexport const trackNextClickForCheckout = ({ noteFieldDisplayed }) => {\n const data = {\n ...getLandingPageData({ noteFieldDisplayed }),\n [FPTI_TAGS.EVENT_NAME]: EVENT_NAME.DW_GIVING_DONATE_SETUP_NEXT_PRESSED,\n [FPTI_TAGS.LINK]: 'donateViaCheckout',\n };\n trackClick(data);\n};\n\nexport const trackSignupChekboxClick = (status) => {\n const data = {\n [FPTI_TAGS.LINK]: 'createAccount',\n [FPTI_TAGS.CHECKBOX]: status,\n [FPTI_TAGS.IS_SIGNUP]: status === 'checked',\n ...PAGE_SPEC.GUEST_FORM,\n };\n trackClick(data);\n};\n\n// This submits the guest form\n// after passing all client side validations\nexport const trackPaymentSubmitClick = ({ isSignUp, isNNA, link }) => {\n const data = {\n ...getDonationAmount(),\n [FPTI_TAGS.LINK]: link,\n [FPTI_TAGS.IS_SIGNUP]: isSignUp,\n ...(isNNA\n ? { [FPTI_TAGS.OFFER_TYPE]: 'nna' }\n : { [FPTI_TAGS.OFFER_TYPE]: undefined }),\n ...(isExternalFlow()\n ? {\n [FPTI_TAGS.EVENT_NAME]:\n EVENT_NAME.DW_GIVING_GUEST_FORM_DONATE_PRESSED,\n }\n : {}),\n ...(link === LINK_NAME.GUEST_FORM_PAYMENT_SUBMIT_BUTTON\n ? { ...PAGE_SPEC.GUEST_FORM }\n : { ...PAGE_SPEC.ONBOARDING_GUEST_FORM }),\n };\n trackClick(data);\n};\n\nexport const trackLinkClick = (\n linkName,\n { eventName, pageSpec = getDefaultPageSpec(), additionalData } = {}\n) => {\n const data = {\n [FPTI_TAGS.LINK]: linkName,\n [FPTI_TAGS.EVENT_NAME]: eventName,\n [FPTI_TAGS.PAGE_LINK]: `${pageSpec?.page}|${linkName}`,\n [FPTI_TAGS.PAGE_GROUP_LINK]: `${pageSpec?.pgrp}|${linkName}`,\n ...pageSpec,\n ...additionalData,\n ...getDonationAmount(),\n };\n trackClick(data);\n};\n","let analytics = window?.PAYPAL?.analytics?.instance;\n\n// Start client side error tracking\nwindow?.PAYPAL?.analytics?.startClientErrorTracking();\n\nexport const trackEventWithData = (spec = {}, additionalData = {}) => {\n const fptiData = {\n ...spec.data,\n ...additionalData,\n };\n // ref: https://github.paypal.com/pages/Tracking-R/client-side-instrumentation/docs/fptiAnalytics.Analytics.html#recordEvent\n // the 3rd param is set to false meaning the data payload won't be merged\n // with window.fpti object\n analytics?.recordEvent(spec.event_name, fptiData, false);\n};\n\nexport const trackEventWithGlobalData = (spec = {}, additionalData = {}) => {\n const fptiData = {\n ...spec.data,\n ...additionalData,\n };\n analytics?.recordEvent(spec.event_name, fptiData, true);\n};\n","import { createHandler as initGriffin } from 'griffin-paypal/number';\nimport { createHandler as initGriffinPhone } from 'griffin-paypal/phone';\nimport _includes from 'lodash/includes';\nlet griffinPhoneHandler;\nlet griffin;\n\ntry {\n const metadata = __getInitialData().clientMetadata;\n if (metadata) {\n griffinPhoneHandler = initGriffinPhone(metadata);\n griffin = initGriffin(metadata);\n }\n} catch (e) {\n console.log(e);\n}\n\nexport function getGriffin() {\n return griffin;\n}\n\nexport function getGriffinPhoneHandler() {\n return griffinPhoneHandler;\n}\n\n/**\n * Grabs the griffin metadata\n */\nexport function __getInitialData() {\n const initialDataNode = document.getElementById('initialData');\n const initialDataJSON =\n (initialDataNode && initialDataNode.innerHTML) || '{}';\n try {\n const initialData = JSON.parse(initialDataJSON); // parse the JSON strings to JavaScript objects\n return initialData;\n } catch (e) {\n console.warn('ERROR:donate:initialData', e);\n return {};\n }\n}\n\n/*\n * _getAmountValue\n * {Array} griffin currency parts\n */\nlet _getAmountValue = function (params) {\n var amount = params && params.find((item) => item.type === 'value');\n return amount && amount.value;\n};\n\n/**\n * getCurrencyParts\n */\nexport function getCurrencyParts() {\n return __getInitialData().currencyParts;\n}\n\n/**\n * getInitialData\n */\nexport function getInitialData() {\n return __getInitialData();\n}\n\n/**\n * Formats getAmountPlaceHolder\n * {string} placeholder\n */\nexport function getAmountPlaceHolder() {\n const allParts = __getInitialData().currencyParts || [];\n const amount = allParts.find((item) => item.$ === 'amount');\n return (amount && amount._) || '';\n}\n\n/**\n * formatAmount\n * {amount} { currency, value }\n */\nexport function formatAmount(amount) {\n if (!amount.value) {\n return '';\n }\n return griffin?.formatCurrency(\n {\n value: normalizeNumber(amount.value),\n currency: amount.currency,\n },\n griffin.CURRENCY_FORMAT\n );\n}\n\n/**\n * Uses Griffin to format a voucher offer detail percentage\n * @param {string} value percentage value\n */\nexport function formatPercentage(value) {\n return griffin?.formatNumber(value, { style: 'percent' });\n}\n\n/**\n * Format currency\n * @constructor\n * @param {string} currency\n * @param {string} value\n */\nexport function formatCurrency(params) {\n if (!params.value || !params.currency) {\n return '';\n }\n // Only if __getInitialData().clientMetadata exists.\n // Member does not require to load griffin client, getting amount from p2p iframe.\n if (!__getInitialData().clientMetadata) {\n return params.value;\n }\n let response = griffin?.formatCurrency(\n {\n value: params.value,\n currency: params.currency,\n },\n griffin.CURRENCY_FORMAT.parts()\n );\n\n return _getAmountValue(response);\n}\n\nexport function formatCurrencyNoDecimals(params) {\n if (!params.value) {\n return '';\n }\n // Only if __getInitialData().clientMetadata exists.\n // Member does not require to load griffin client, getting amount from p2p iframe.\n if (!__getInitialData().clientMetadata) {\n return params.value;\n }\n\n var options = griffin.NUMBER_FORMAT;\n options.maximumFractionDigits = 0;\n\n let formattedCurrency = griffin?.formatNumber(params.value, options);\n\n return formattedCurrency;\n}\n\nexport function formatCurrencyAsString(params) {\n if (!params.value || !params.currency) {\n return '';\n }\n // Only if __getInitialData().clientMetadata exists.\n // Member does not require to load griffin client, getting amount from p2p iframe.\n if (!__getInitialData().clientMetadata) {\n return params.value;\n }\n\n var options = params.format ? params.format : griffin.CURRENCY_FORMAT;\n if (Object.prototype.hasOwnProperty.call(params, 'maximumFractionDigits')) {\n options.maximumFractionDigits = params.maximumFractionDigits;\n }\n\n let response = griffin?.formatCurrency(\n {\n value: params.value,\n currency: params.currency,\n },\n options\n );\n return response;\n}\n\n/**\n * normalizer number\n * {number} {amount}\n * https://github.paypal.com/Globalization-R/griffin-paypal/blob/develop/lib/client/README.md#normalizenumber\n */\nexport function normalizeNumber(amount) {\n if (!amount) {\n return '';\n }\n return griffin?.normalizeNumber(amount);\n}\n\n/**\n * formatInputAmount\n * {string} amount\n */\nexport function formatInputAmount(amount) {\n if (!amount.value) {\n return '';\n }\n\n return _getAmountValue(\n griffin?.formatCurrency(\n {\n value: normalizeNumber(amount.value),\n currency: amount.currency,\n },\n griffin.CURRENCY_FORMAT.parts()\n ) || []\n );\n}\n\n/**\n * Uses griffin to format phone number\n *\n * @param {String} countryCode country phone code. Eg: '1', '41', '91'\n * @param {String} nationalNumber Phone number Eg: '012312', '418419'\n * @return {String} Formatted phone number Eg: '(418) 400 1234'\n */\nexport function formatPhone(countryCode, nationalNumber) {\n if (!griffinPhoneHandler) {\n return nationalNumber;\n }\n\n const phoneObj = {\n countryCode,\n };\n\n try {\n const formattedPhone = griffinPhoneHandler.formatAsTyped(\n nationalNumber,\n phoneObj\n );\n return formattedPhone;\n } catch (e) {\n // Happens when phone number contains invalid characters\n return '';\n }\n}\n\nexport function validatePhone(countryCode, nationalNumber) {\n if (!griffinPhoneHandler) {\n return false;\n }\n\n try {\n const normalizedPhone =\n griffinPhoneHandler.normalizePhoneNumber(nationalNumber);\n\n if (!normalizedPhone || normalizedPhone.errors) {\n return false;\n }\n\n const validationResult =\n griffinPhoneHandler.validatePhoneNumber(normalizedPhone);\n if (validationResult && validationResult.errors) {\n return false;\n }\n return true;\n } catch (e) {\n console.log('e ', e);\n return false;\n }\n}\n\n/**\n * Removes country code from phoneNumber\n * Eg:\n * Input: \"+49 6645878508\"\n * Output: \"6645878508\"\n */\nexport function getPhoneNumberWithoutCountryCode(phoneNumber) {\n if (!phoneNumber || typeof phoneNumber !== 'string') {\n return phoneNumber;\n }\n\n const firstCharacter = phoneNumber[0];\n if (firstCharacter !== '+') {\n // No country code\n return phoneNumber;\n }\n\n const firstSpaceIndex = phoneNumber.indexOf(' ');\n // No Space !! Malformed?\n if (firstSpaceIndex === -1) {\n return phoneNumber;\n }\n\n // First space is last character?\n if (phoneNumber.length < firstSpaceIndex + 1) {\n return phoneNumber;\n }\n\n return phoneNumber.substr(firstSpaceIndex + 1);\n}\n\nexport function getDateFormat() {\n var initialData = __getInitialData();\n var dateFormat =\n (initialData.dateMetadata && initialData.dateMetadata.pattern) ||\n 'DD/MM/YY';\n\n return dateFormat.toUpperCase();\n}\n\nexport function exchangeRateDecimalPoints(amount, decimalPoint, symbol) {\n let exchangeRate = amount;\n let decimal = _includes(exchangeRate, decimalPoint) // checks that exchange rate actually contains the decimal point that it's receiving from the the api call\n ? decimalPoint\n : '.';\n let values = exchangeRate.split(decimal)[1].split(''); // splits the value so that it can get all of the numbers after the decimal place and put them in an array ex. 0.00541 => [0, 0, 5, 4, 1]\n let totalDecimals = 0;\n for (let index = 0; index < values.length; index++) {\n if (values[index] > 0) {\n totalDecimals = index + 2;\n break;\n }\n }\n amount = parseFloat(amount).toFixed(totalDecimals);\n return `${symbol}${amount}`.replace(\n // replaces the decimal just to show it for the expected country\n /[.|,]/i,\n decimalPoint\n );\n}\n\nexport function formatCurrencyWithSymbol(params) {\n return griffin?.formatCurrency(params, griffin.CURRENCY_FORMAT);\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport getContent from 'pp-react-l10n';\nimport { Checkbox } from '@paypalcorp/pp-react';\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 return (\n \n );\n};\n\nCoverFeeCheckbox.propTypes = {\n handleCoverFeeChange: PropTypes.func,\n optInStatus: PropTypes.bool,\n formatedFeeAmount: PropTypes.string,\n isDisabled: PropTypes.bool,\n};\n\nexport default CoverFeeCheckbox;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport { DropdownMenu } from '@paypalcorp/pp-react-dropdown-menu';\nimport * as AppActions from '../../actions/AppActions';\nimport appStore from '../../stores/AppStore';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nconst messages = localsMessages('common/programs');\n\nconst Programs = ({ programNames, isDisabled }) => {\n const [selectedIdx, handleSelect] = useState(0);\n\n const getProgramOptions = () => {\n const options = [];\n programNames.forEach((programName) => {\n options.push({\n primaryText: programName,\n });\n });\n\n return options;\n };\n\n const updateProgramId = (index) => {\n handleSelect(index);\n const selectedProgram = index === -1 ? '' : programNames[index];\n AppActions.updateSelectedProgram(selectedProgram);\n trackLinkClick(LINK_NAME.PROGRAM_SELECTED, {\n additionalData: {\n [FPTI_TAGS.CAMPAIGN]: selectedProgram,\n },\n });\n };\n\n useEffect(() => {\n let programOption = getProgramOptions().findIndex(\n (program) => program.primaryText === appStore.getSelectedProgram()\n );\n programOption = programOption === -1 ? 0 : programOption;\n handleSelect(programOption);\n AppActions.updateSelectedProgram(programNames[programOption]);\n }, []);\n\n return (\n \n );\n};\n\nPrograms.propTypes = {\n programNames: PropTypes.array,\n isDisabled: PropTypes.bool,\n};\n\nexport default Programs;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _map from 'lodash/map';\nimport {\n displayCurrency,\n formatAmountToOnlyNumbers,\n} from '../../../../utils/amountUtils';\nimport { BodyText, Col } from '@paypalcorp/pp-react';\nimport templateData from '../../../../../utility/getTemplateData';\nimport { PresetAmounts } from '@paypalcorp/donate-react';\n\nconst isRTL = templateData.contextLocalityDir === 'rtl';\n\nconst PresetAmountButtonPreviewComponent = ({\n displayAmount,\n currencyCode,\n}) => {\n return (\n \n \n {displayAmount}\n \n \n {currencyCode}\n \n \n );\n};\n\nPresetAmountButtonPreviewComponent.propTypes = {\n displayAmount: PropTypes.string,\n currencyCode: PropTypes.string,\n};\n\nconst PresetAmountPreviewComponent = ({\n amountOptions,\n currencyCode,\n otherAmountLabel,\n isMobile = false,\n}) => {\n let presetAmountOptions = [];\n\n _map(amountOptions, (amount) => {\n const formattedAmount = displayCurrency(\n formatAmountToOnlyNumbers(amount),\n currencyCode,\n { noDecimals: true }\n );\n presetAmountOptions.push({\n label: formattedAmount,\n secondaryLabel: currencyCode,\n value: formattedAmount,\n });\n });\n\n const otherAmountOption = {\n label: otherAmountLabel,\n value: otherAmountLabel,\n };\n if (isRTL) {\n presetAmountOptions = [otherAmountOption, ...presetAmountOptions];\n } else {\n presetAmountOptions = [...presetAmountOptions, otherAmountOption];\n }\n\n return (\n \n \n \n );\n};\n\nPresetAmountPreviewComponent.propTypes = {\n amountOptions: PropTypes.array,\n currencyCode: PropTypes.string,\n isMobile: PropTypes.bool,\n otherAmountLabel: PropTypes.string,\n};\n\nexport default PresetAmountPreviewComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Icon } from '@paypalcorp/pp-react';\n\nexport default function NoteFieldError(props) {\n const errorText = props.errorText;\n\n if (!errorText) {\n return null;\n }\n return (\n
\n \n \n \n {errorText}\n \n \n
\n );\n}\n\nNoteFieldError.propTypes = {\n errorText: PropTypes.string,\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport templateData, { localsMessages } from '../utility/getTemplateData';\nimport * as AppActions from '../actions/AppActions';\nimport AppStore from '../stores/AppStore';\nimport { addClass, removeClass } from '../utility/domUtils';\nimport { isExternalFlow } from '../utility/externalIntegrationUtils';\nimport isEmpty from 'lodash/isEmpty';\nimport { EVENT_NAME } from '../utility/constants';\nimport { IconButton, TextArea, BodyText } from '@paypalcorp/pp-react';\nimport NoteFieldError from './NoteFieldError';\nimport { trackLinkClick } from '../fpti/fpti';\nimport { LINK_NAME } from '../fpti/fptiConstants';\n\nlet messages = localsMessages('common/note');\nconst MAX_CHAR_LIMIT = 250;\n\nfunction NoteComponent(props) {\n let { label = '', error: { lengthLimit = '' } = {} } = messages.note;\n\n let providedLabel = label;\n if (templateData.charityNoteEnabled && templateData.charityNoteLabel) {\n providedLabel = templateData.charityNoteLabel;\n }\n\n if (props.label) {\n providedLabel = props.label;\n }\n\n const [donationNote, setDonationNote] = useState(\n AppStore.getDonationNote() || templateData.donationNote || ''\n );\n const initialNoteLabel = isEmpty(donationNote) ? providedLabel : donationNote;\n\n const [showLabel, setShowLabel] = useState(true);\n const [showError, setShowError] = useState(false);\n const [noteLabel, setNoteLabel] = useState(initialNoteLabel);\n const textAreaEl = useRef(null);\n\n const isNoteTextPresent = donationNote.length > 0 ? true : false;\n\n useEffect(() => {\n if (!showLabel && !isEmpty(textAreaEl)) {\n textAreaEl.current.focus();\n }\n }, [showLabel]);\n useEffect(() => {\n if (isNoteTextPresent) {\n setShowLabel(false);\n }\n }, []);\n useEffect(() => {\n if (props.isNotePreview) {\n setNoteLabel(initialNoteLabel);\n }\n }, [initialNoteLabel]);\n\n const directionality = templateData.contextLocalityDir;\n\n const handleClick = () => {\n trackLinkClick(LINK_NAME.NOTE_PAD, {\n eventName: isExternalFlow()\n ? EVENT_NAME.DW_GIVING_DONATE_SETUP_COMMENT_PRESSED\n : '',\n });\n setShowLabel(false);\n };\n\n const handleBlur = (event) => {\n const note = event.target.value;\n\n // Remove all whitespaces\n if (!isEmpty(note) && !isEmpty(note.trim())) {\n AppActions.changeNote({ note });\n setNoteLabel(note);\n } else {\n AppActions.changeNote({ note: '' });\n setNoteLabel(providedLabel);\n setShowLabel(true);\n }\n };\n\n const showNoteFieldError = () => {\n setShowError(true);\n };\n\n const hideNoteFieldError = () => {\n setShowError(false);\n };\n\n const handleOnChange = (event) => {\n const value = event.target.value;\n setDonationNote(value);\n\n if (value && value.length >= MAX_CHAR_LIMIT) {\n addClass('.note_wrap', ['animated', 'shake']);\n setTimeout(() => {\n removeClass('.note_wrap', ['animated', 'shake']);\n }, 1000);\n showNoteFieldError();\n } else {\n hideNoteFieldError();\n }\n };\n\n return (\n
\n \n {showLabel ? (\n \n ) : (\n
\n \n
\n )}\n\n {showError && showLabel && }\n
\n \n );\n}\n\nNoteComponent.propTypes = {\n label: PropTypes.string,\n isNotePreview: PropTypes.bool,\n};\n\nexport default NoteComponent;\n","import React from 'react';\nimport { HeadingText } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../utils/localesMessages';\n\nconst {\n preview: { paymentInfo },\n} = getLocaleMessages('buttonsV3/preview');\n\nconst DonorPaymentInfoSkeleton = () => {\n return (\n
\n \n {paymentInfo}\n \n
\n
\n
\n
\n );\n};\n\nexport default DonorPaymentInfoSkeleton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _get from 'lodash/get';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { getVoucherDetail } from '../partner/utils/partnerUtils';\nimport {\n Accordion,\n AccordionRow,\n BodyText,\n CaptionText,\n Divider,\n Icon,\n Row,\n} from '@paypalcorp/pp-react';\n\nconst { phoneComponent: { voucher = {} } = {} } =\n getLocaleMessages('buttonsV3/partner');\n\nconst VoucherPreviewComponent = ({ offerProgram, receiverName }) => {\n const voucherMessageHeader = _get(voucher, 'message.header', '').split(\n '{messageMerchantName}'\n );\n const { voucherDetails, discountTagline } = getVoucherDetail({\n offerProgram,\n });\n\n const voucherHeading = (\n
\n \n \n
\n );\n\n return (\n \n \n \n \n
\n \n {_get(voucherMessageHeader, '0', '')}\n {receiverName}\n {_get(voucherMessageHeader, '1', '')}\n \n {`\"${voucherDetails}\"`}\n
\n
\n
\n
\n );\n};\n\nVoucherPreviewComponent.propTypes = {\n offerProgram: PropTypes.object,\n receiverName: PropTypes.string,\n};\n\nexport default VoucherPreviewComponent;\n","import React from 'react';\nimport { ThemeProvider } from '@paypalcorp/pp-react-theme';\n\nfunction withTheme(WrappedComponent, theme = 'v2') {\n const ThemedComponent = (props) => {\n return (\n \n \n \n );\n };\n return ThemedComponent;\n}\n\nexport default withTheme;\n","import React from 'react';\nimport { Tooltip } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from '../../utility/paypalAphrodite';\n\nconst styles = StyleSheet.create({\n baseLayerContainer: {\n position: 'absolute',\n },\n\n centeringContainer: {\n position: 'absolute',\n left: -2,\n },\n});\n\nconst PPCC = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default PPCC;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getFormValues } from 'redux-form';\nimport isEmpty from 'lodash/isEmpty';\nimport _get from 'lodash/get';\n\nimport {\n HeadingText,\n Tooltip,\n Container,\n Row,\n BodyText,\n Button,\n V2PaypalIcon,\n CaptionText,\n DropdownMenu,\n} from '@paypalcorp/pp-react';\nimport getContent from 'pp-react-l10n';\n\nimport SingleAmount from '../buttonManager/buttonOverview/components/singleAmount';\nimport RecurringCheckbox from '../buttonManager/buttonOverview/components/recurringCheckbox';\nimport CoverFeeCheckbox from '../../../components/coverFee/coverFeeCheckbox';\nimport Programs from '../../../components/programs/Programs';\nimport { LOGO_TARGET_PROFILE } from '../../reducers/reducerButtonFactoryV3';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport {\n isGuestFormPreview,\n isHostedFlow,\n} from '../../utils/buttonFactoryUtils';\nimport { AMOUNT_OPTIONS } from '../../utils/constants';\nimport PresetAmountPreviewComponent from '../buttonManager/buttonOverview/components/PresetAmountPreviewComponent';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport NoteComponent from '../../../components/note';\nimport DonorPaymentInfoSkeleton from './DonorPaymentInfoSkeleton';\nimport VoucherPreviewComponent from './VoucherPreviewComponent';\nimport withTheme from '../withTheme';\nimport { appendCdnHostName } from '../../../../../lib/geoUtils';\nimport PPCC from '../ppcc';\nimport { MERCHANT_PPCC_CONFIRMED_STATUS } from '../../../utility/constants';\nimport { getPPCCStatus } from '../../../utility/helper';\n\nconst {\n phonePreview: {\n cancelAndReturn,\n donateTo,\n donateWithPayPal,\n donateWithCard,\n otherAmount,\n } = {},\n} = getLocaleMessages('buttonsV3/buttonOverview');\n\nconst { phoneComponent: { voucher } = {} } =\n getLocaleMessages('buttonsV3/partner');\n\nconst { initialNote } = getLocaleMessages('buttonsV3/note');\nconst { previewMessage } = getLocaleMessages('buttonsV3/imageBanner');\nconst { logoPreviewMessage } = getLocaleMessages('buttonsV3/logoExperience');\nconst {\n preview: { donateNow },\n mailingAddressLabel,\n mailingAddressPrimaryText,\n mailingAddressHelperText,\n} = getLocaleMessages('buttonsV3/preview');\nconst {\n paypalBranding: { poweredBy },\n} = getLocaleMessages('buttonsV3/buttonPreview');\n\nconst termsContent = getContent('locals')('buttonsV3/preview')('terms', null, {\n useHTML: true,\n});\n\nconst CommonPreviewComponent = ({\n formattedButton,\n formValues,\n isMobile = false,\n currentStep,\n isButtonOverviewPreview = false,\n match = {},\n isSDKPreview = false,\n}) => {\n const buttonDetails = !isButtonOverviewPreview ? formValues : formattedButton;\n const {\n amountType,\n amountValue = '0',\n cancelReturn,\n coverFeesEnabled,\n receiverName,\n logoTarget,\n logoUrl,\n businessProfileLogoUrl,\n merchantAmount1,\n merchantAmount2,\n merchantAmount3,\n noCancelReturn,\n offerProgram,\n listPrograms,\n paymentSettingsLogoUrl,\n programNames = [],\n purpose,\n receiverCurrency,\n recurringEnabled,\n noteLabel,\n noBannerImage,\n bannerImageUrl,\n noLogoImage,\n version,\n } = buttonDetails;\n const isVoucherFlow = !isEmpty(offerProgram);\n\n const getLogoUrl = () => {\n const currentUrl = window.location.href;\n // Covering the legacy overview page just in case\n // /donate/buttons/:buttonId\n const isManageRoute =\n currentUrl.indexOf('/manage') >= 0 ||\n (!isEmpty(_get(match, 'params.buttonId')) &&\n currentUrl.indexOf('/edit') < 0 &&\n currentUrl.indexOf('/duplicate') < 0);\n\n if (logoTarget === LOGO_TARGET_PROFILE) {\n if (isManageRoute) {\n return isEmpty(version)\n ? paymentSettingsLogoUrl || businessProfileLogoUrl\n : businessProfileLogoUrl;\n }\n return businessProfileLogoUrl;\n }\n return logoUrl;\n };\n\n const iconUrl = getLogoUrl();\n const displayLogo = noLogoImage === 'no';\n const isPresetAmount = amountType === AMOUNT_OPTIONS.AMOUNT_TYPE_PRESET;\n const amountOptions = [\n ...(isPresetAmount\n ? [merchantAmount1, merchantAmount2, merchantAmount3]\n : []),\n ];\n const displayGuestFormPreview =\n isGuestFormPreview(currentStep) && !isButtonOverviewPreview;\n const displayAddressCheckbox =\n displayGuestFormPreview && formValues.noShipping === 'no';\n const displayNote = displayGuestFormPreview && formValues.noNote === 'no';\n const note = noteLabel ? noteLabel : initialNote;\n const showCancelOrReturn =\n noCancelReturn === 'no' && !isEmpty(cancelReturn) && !isSDKPreview;\n const displayBanner = noBannerImage === 'no';\n const isGuestFormMobileorSdk =\n displayGuestFormPreview && (isSDKPreview || isMobile);\n const displayDivider =\n isMobile &&\n !isSDKPreview &&\n (!displayGuestFormPreview ? showCancelOrReturn : true);\n\n if (!isEmpty(formValues) || !isEmpty(formattedButton)) {\n let amountCurrency = isEmpty(receiverCurrency)\n ? formattedButton.receiverCurrency\n : receiverCurrency;\n\n const renderAmount = () => {\n if (displayGuestFormPreview) {\n return (\n \n );\n }\n\n return isPresetAmount ? (\n \n ) : (\n \n );\n };\n\n return (\n <>\n \n {displayBanner && (\n
\n {isEmpty(bannerImageUrl) ? (\n
\n {{previewMessage}}\n
\n ) : (\n \n )}\n
\n )}\n \n {displayLogo && (\n \n {isEmpty(iconUrl) ? (\n \n {logoPreviewMessage}\n \n ) : (\n \n )}\n \n )}\n\n \n \n {isVoucherFlow ? voucher.title : donateTo}\n \n \n\n \n \n {receiverName}\n {getPPCCStatus() === MERCHANT_PPCC_CONFIRMED_STATUS && (\n \n \n \n )}\n \n \n {!displayGuestFormPreview && purpose ? (\n \n \n {purpose}\n \n \n ) : null}\n\n {renderAmount()}\n\n {!displayGuestFormPreview && listPrograms === 'yes' && (\n \n )}\n\n {!displayGuestFormPreview && recurringEnabled === 'yes' && (\n
\n {' '}\n \n \n \n
\n )}\n\n {!displayGuestFormPreview &&\n coverFeesEnabled === 'yes' &&\n isHostedFlow() && (\n
\n \n
\n )}\n\n {displayNote && }\n\n {displayGuestFormPreview && }\n\n {displayAddressCheckbox && (\n <>\n \n {mailingAddressLabel}\n \n {}}\n tabIndex=\"-1\"\n />\n \n )}\n\n {isVoucherFlow && (\n \n )}\n\n {displayGuestFormPreview && (\n \n {termsContent}\n \n )}\n\n \n {!displayGuestFormPreview ? (\n \n {donateWithPayPal}\n \n ) : (\n \n {donateNow}\n \n )}\n \n\n {!displayGuestFormPreview && (\n \n \n {donateWithCard}\n \n \n )}\n \n {displayDivider &&
}\n {showCancelOrReturn && (\n \n {cancelAndReturn.replace('{orgName}', receiverName)}\n \n )}\n {isGuestFormMobileorSdk && (\n \n {poweredBy}\n \n \n )}\n \n \n );\n }\n\n return null;\n};\n\nCommonPreviewComponent.propTypes = {\n formattedButton: PropTypes.object,\n formValues: PropTypes.object,\n isMobile: PropTypes.bool,\n showVoucherFlow: PropTypes.bool,\n currentStep: PropTypes.number,\n isButtonOverviewPreview: PropTypes.bool,\n};\n\nconst mapStateToProps = (state) => {\n const formValues = getFormValues(BTN_FACTORY_V3_FORM)(state) || {};\n\n return {\n formValues,\n formattedButton:\n state.buttonFactoryV3?.formattedButton ||\n state.buttonManagerV3?.formattedButton,\n currentStep: state.buttonFactoryV3?.currentStep,\n };\n};\n\nexport default connect(mapStateToProps)(withTheme(CommonPreviewComponent));\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 getLocaleMessages from '../utils/localesMessages';\nimport _isEmpty from 'lodash/isEmpty';\nimport _merge from 'lodash/merge';\nimport {\n isValidSecureUrl,\n isValidUrl,\n validateExtraVariables,\n byteLength,\n} from '../utils/clientValidatorUtils';\nimport {\n normalizeNumber,\n formatCurrencyNoDecimals,\n} from '../utils/amountUtils';\nimport { LOGO_TARGET_BUTTON } from '../reducers/reducerButtonFactory';\n\nconst {\n amount = {},\n url = {},\n required,\n programs: { atleastOne, duplicatedProgram },\n genericSizeError,\n} = getLocaleMessages('buttonsV3/fieldErrors');\n\nconst MAX_TEXT_LENGTH = 127;\nconst MAX_NOTE_LENGTH = 40;\nexport const MAX_BUTTON_NAME_LENGTH = 50;\nconst invalidProgramSizeError = genericSizeError.replace(\n '{maxSize}',\n MAX_TEXT_LENGTH\n);\nconst invalidPurposeSizeError = genericSizeError.replace(\n '{maxSize}',\n MAX_TEXT_LENGTH\n);\nconst invalidNameSizeError = genericSizeError.replace(\n '{maxSize}',\n MAX_BUTTON_NAME_LENGTH\n);\nconst invalidNoteSizeError = genericSizeError.replace(\n '{maxSize}',\n MAX_NOTE_LENGTH\n);\n\nexport function validate(values) {\n const errors = {};\n\n // Validation for buttonImageUrl\n if (values.usePaypalButtonStyle === 'no') {\n const buttonImageUrl = values.buttonImageUrl;\n\n if (!buttonImageUrl) {\n errors.buttonImageUrl = required;\n } else if (!isValidUrl(buttonImageUrl)) {\n errors.buttonImageUrl = url.invalid;\n }\n }\n\n if (!values.receiverCurrency) {\n errors.receiverCurrency = required;\n }\n\n const currencyParams = {\n currency: values.receiverCurrency,\n value: 1,\n };\n const minimumDonationError =\n values.receiverCurrency &&\n amount.minimumDonationUS.replace(\n '{amount}',\n formatCurrencyNoDecimals(currencyParams)\n );\n\n if (values.amountType === 'fixed') {\n const isUSD = ['USD'].indexOf(values.receiverCurrency) >= 0;\n if (_isEmpty(values.amountValue)) {\n errors.amountValue = amount.required;\n } else if (isUSD && parseFloat(normalizeNumber(values.amountValue)) < 1) {\n errors.amountValue = minimumDonationError;\n } else if (!isUSD && normalizeNumber(parseFloat(values.amountValue)) <= 0) {\n errors.amountValue = amount.required;\n }\n }\n\n if (values.amountType === 'merchant_recommended') {\n const isUSD = ['USD'].indexOf(values.receiverCurrency) >= 0;\n if (_isEmpty(values.merchantAmount1)) {\n errors.merchantAmount1 = amount.required;\n } else if (\n isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount1)) < 1\n ) {\n errors.merchantAmount1 = minimumDonationError;\n } else if (\n !isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount1)) <= 0\n ) {\n errors.merchantAmount1 = amount.required;\n }\n if (_isEmpty(values.merchantAmount2)) {\n errors.merchantAmount2 = amount.required;\n } else if (\n isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount2)) < 1\n ) {\n errors.merchantAmount2 = minimumDonationError;\n } else if (\n !isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount2)) <= 0\n ) {\n errors.merchantAmount2 = amount.required;\n }\n\n if (_isEmpty(values.merchantAmount3)) {\n errors.merchantAmount3 = amount.required;\n } else if (\n isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount3)) < 1\n ) {\n errors.merchantAmount3 = minimumDonationError;\n } else if (\n !isUSD &&\n normalizeNumber(parseFloat(values.merchantAmount3)) <= 0\n ) {\n errors.merchantAmount3 = amount.required;\n }\n }\n\n if (\n values.logoTarget === LOGO_TARGET_BUTTON &&\n !isValidSecureUrl(values.logoUrl)\n ) {\n errors.logoUrl = url.insecure;\n }\n\n if (values.cancelReturn && !isValidUrl(values.cancelReturn)) {\n errors.cancelReturn = url.generic;\n }\n\n if (values.return && !isValidUrl(values.return)) {\n errors.return = url.generic;\n }\n\n const extraVariablesError = validateExtraVariables(values.extraVariablesView);\n if (extraVariablesError) {\n errors.extraVariablesView = extraVariablesError;\n }\n\n // Check text field length\n if (values.purpose && byteLength(values.purpose) > MAX_TEXT_LENGTH) {\n errors.purpose = invalidPurposeSizeError;\n }\n\n if (values.noteLabel && values.noteLabel.length > MAX_NOTE_LENGTH) {\n errors.noteLabel = invalidNoteSizeError;\n }\n\n if (values.buttonName && values.buttonName.length > MAX_BUTTON_NAME_LENGTH) {\n errors.buttonName = invalidNameSizeError;\n }\n\n if (values.itemNumber && byteLength(values.itemNumber) > MAX_TEXT_LENGTH) {\n errors.itemNumber = invalidProgramSizeError;\n }\n\n const programErrors = validatePrograms(values);\n if (!_isEmpty(programErrors)) {\n _merge(errors, programErrors);\n }\n\n return errors;\n}\n\nexport function validatePrograms(values) {\n const errors = {};\n if (values.listPrograms === 'no') {\n return;\n }\n\n const programNames = values.programNames ?? [];\n\n if (programNames.length > 1) {\n for (let i = 0; i < programNames.length; i++) {\n if (byteLength(programNames[i]) > MAX_TEXT_LENGTH) {\n errors[`programInput${i}`] = invalidProgramSizeError;\n } else if (validateDuplication(programNames[i], i, programNames)) {\n errors[`programInput${i}`] = duplicatedProgram;\n } else if (_isEmpty(programNames[i])) {\n errors[`programInput${i}`] = atleastOne;\n }\n }\n } else {\n if (_isEmpty(programNames[0])) {\n errors.programInput0 = atleastOne;\n }\n if (\n !_isEmpty(programNames[0]) &&\n byteLength(programNames[0]) > MAX_TEXT_LENGTH\n ) {\n errors.programInput0 = invalidProgramSizeError;\n }\n }\n return errors;\n}\n\nfunction validateDuplication(value, position, programNames) {\n let duplicated = false;\n for (let i = 0; i < programNames.length; i++) {\n if (value === programNames[i] && position !== i) {\n duplicated = true;\n break;\n }\n }\n return duplicated;\n}\n","import AppDispatcher from '../dispatcher/AppDispatcher';\nimport assign from 'object-assign';\nimport { EventEmitter } from 'events';\nimport * as DonationConstants from '../utility/constants';\n\nconst CHANGE_EVENT = 'change';\n\nlet _alldata = {}; // collection of donation data\n\n/**\n * @param {string} text The content donation\n */\nfunction create(field, value) {\n _alldata[field] = value;\n}\n\nvar DonationStore = assign({}, EventEmitter.prototype, {\n emitChange: function () {\n this.emit(CHANGE_EVENT);\n },\n\n getAllData: function () {\n return _alldata;\n },\n\n getDonationAmount: function () {\n if (_alldata.amount) {\n return _alldata.amount.toString();\n }\n return _alldata.amount;\n },\n\n getDonationSymbol: function () {\n return _alldata.symbol;\n },\n\n getDonationCode: function () {\n return _alldata.code;\n },\n\n getFormatedAmount: function () {\n return _alldata.formatedAmount;\n },\n\n getDonationNote: function () {\n return _alldata.note;\n },\n\n getDonationRecurring: function () {\n return _alldata.recurring;\n },\n\n getRecurringModalStatus: function () {\n return _alldata.recurringModalStatus;\n },\n\n getAnonymousStatus: function () {\n return _alldata.anonymousStatus;\n },\n\n getCoverFeeOptInStatus: function () {\n return _alldata.coverFee;\n },\n\n getFeeAmount: function () {\n return _alldata.feeAmount;\n },\n\n getFormatedFeeAmount: function () {\n return _alldata.formatedFeeAmount;\n },\n\n getAmountBeforeFee: function () {\n return _alldata.amountBeforeFee;\n },\n\n getConfirmation: function () {\n return _alldata.confirmation;\n },\n\n getPostBackData: function () {\n return _alldata.postBackData;\n },\n\n getCurrentPage: function () {\n return _alldata.currentPage;\n },\n\n getServerErros: function () {\n return _alldata.serverErrors;\n },\n\n getPaymentError: function () {\n return _alldata.paymentError;\n },\n\n getSignUpError: function () {\n return _alldata.signUpError;\n },\n\n getFundingOptions: function () {\n return _alldata.fundingOptions;\n },\n\n getEmail: function () {\n return _alldata.email;\n },\n\n getBillingAddress: function () {\n return _alldata.billingAddress;\n },\n\n getUserCountry: function () {\n return _alldata.country;\n },\n\n getDonationAmountType: function () {\n return _alldata.donationAmountType;\n },\n\n getGiftaidItFlagStatus: function () {\n return _alldata.giftAidItFlag;\n },\n\n getShareAddress: function () {\n return _alldata.shareAddress;\n },\n\n getAddCardError: function () {\n return _alldata.addCardError;\n },\n\n getGiftAidItExtraAmount: function () {\n return DonationConstants.DONATE_GIFTAID_IT_EXTRA_AMOUNT;\n },\n\n getSelectedProgram: function () {\n return _alldata.selectedProgram;\n },\n\n getSelectedPresetButtonId: function () {\n return _alldata.selectedPresetButtonId;\n },\n\n getCardSpec: function () {\n return _alldata.cardSpec;\n },\n\n getFormData: function () {\n return _alldata.formData;\n },\n\n getThreeDSContingency: function () {\n return _alldata.threeDSContingency;\n },\n\n getLanguageSelectorState: function () {\n return _alldata.languageSelectorState;\n },\n\n getOrderStatus: function () {\n return _alldata.orderStatus;\n },\n\n dispatcherIndex: AppDispatcher.register(function (payload) {\n var action = payload.action;\n var amount,\n recurring,\n recurringModalStatus,\n note,\n symbol,\n code,\n formatedAmount,\n country,\n confirmation,\n postBackData,\n currentPage,\n serverErrors,\n paymentError,\n signUpError,\n fundingOptions,\n email,\n billingAddress,\n giftAidItFlag,\n coverFee,\n feeAmount,\n formatedFeeAmount,\n amountBeforeFee,\n anonymousStatus,\n orderStatus;\n\n switch (action.actionType) {\n case DonationConstants.CHANGE_AMOUNT:\n amount = action.item.amount.trim();\n create('amount', amount);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.CHANGE_SYMBOL:\n symbol = action.item.symbol.trim();\n if (symbol !== '') {\n create('symbol', symbol);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_CODE:\n code = action.item.code.trim();\n if (code !== '') {\n create('code', code);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_FORMATED_AMOUNT:\n formatedAmount = action.item.formatedAmount;\n if (formatedAmount !== '') {\n create('formatedAmount', formatedAmount);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_RECURRING:\n recurring = action.item.recurring.trim();\n if (recurring !== '') {\n create('recurring', recurring);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_ANONYMOUS_STATUS:\n anonymousStatus = action.item.anonymousStatus.trim();\n if (anonymousStatus !== '') {\n create('anonymousStatus', anonymousStatus);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_COVER_FEE:\n coverFee = action.item.coverFee.trim();\n if (coverFee !== '') {\n create('coverFee', coverFee);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_FEE_AMOUNT:\n feeAmount = action.item.feeAmount;\n if (feeAmount !== '') {\n create('feeAmount', feeAmount);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_FORMATED_FEE_AMOUNT:\n formatedFeeAmount = action.item.formatedFeeAmount;\n create('formatedFeeAmount', formatedFeeAmount);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.CHANGE_AMOUNT_BEFORE_FEE:\n amountBeforeFee = action.item.amountBeforeFee;\n create('amountBeforeFee', amountBeforeFee);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.RP_MODAL_CLOSED:\n recurringModalStatus = action.item.recurringModalStatus.trim();\n if (recurringModalStatus !== '') {\n create('recurringModalStatus', recurringModalStatus);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_NOTE:\n note = action.item.note.trim();\n if (note !== '') {\n create('note', note);\n DonationStore.emitChange();\n } else {\n create('note', '');\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.CHANGE_COUNTRY:\n country = action.item.country.trim();\n if (country !== '') {\n create('country', country);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.UPDATE_CONFIRMATION:\n confirmation = action.item.confirmation;\n if (confirmation !== '') {\n create('confirmation', confirmation);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.POST_BACK_DATA:\n postBackData = action.item.postBackData;\n if (postBackData !== '') {\n create('postBackData', postBackData);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.UPDATE_CURRENT_PAGE:\n currentPage = action.item.currentPage;\n if (currentPage !== '') {\n create('currentPage', currentPage);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.UPDATE_SERVER_ERRORS:\n serverErrors = action.item.serverErrors;\n if (serverErrors !== '') {\n create('serverErrors', serverErrors);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.PAYMENT_ERROR:\n paymentError = action.item.paymentError;\n if (paymentError !== '') {\n create('paymentError', paymentError);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.UPDATE_SIGN_UP_ERROR:\n signUpError = action.item.signUpError;\n if (signUpError !== '') {\n create('signUpError', signUpError);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.FUNDING_OPTIONS:\n fundingOptions = action.item.fundingOptions;\n if (fundingOptions !== '') {\n create('fundingOptions', fundingOptions);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.EMAIL:\n email = action.item.email;\n if (email !== '') {\n create('email', email);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.BILLING_ADDRESS:\n billingAddress = action.item.billingAddress;\n if (billingAddress !== '') {\n create('billingAddress', billingAddress);\n DonationStore.emitChange();\n }\n break;\n\n case DonationConstants.UPDATE_DONATION_AMOUNT_TYPE:\n create('donationAmountType', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.GIFT_AID_IT:\n giftAidItFlag = action.item.giftAidItFlag;\n create('giftAidItFlag', giftAidItFlag);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.CHANGE_SHARE_ADDRESS:\n create('shareAddress', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.ADD_CARD_ERROR:\n create('addCardError', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.UPDATE_SELECTED_PROGRAM:\n create('selectedProgram', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.UPDATE_SELECTED_PRESET_BUTTON_ID:\n create('selectedPresetButtonId', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.CHANGE_CARD_SPEC:\n create('cardSpec', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.SAVE_FORM_DATA:\n create('formData', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.UPDATE_THREEDS_DATA:\n create('threeDSContingency', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.SHOW_LANGUAGE_SELECTOR:\n create('languageSelectorState', action.item);\n DonationStore.emitChange();\n break;\n\n case DonationConstants.UPDATE_ORDER_STATUS:\n orderStatus = action.item.orderStatus.trim();\n if (orderStatus !== '') {\n create('orderStatus', action.item);\n DonationStore.emitChange();\n }\n break;\n\n default:\n break;\n }\n\n return true; // No errors. Needed by promise in Dispatcher.\n }),\n});\n\nAppDispatcher.register((payload) => {\n return true;\n});\n\nexport default DonationStore;\n","import {\n BUTTON_FACTORY_BUSY,\n INITIALIZE_WIZARD,\n WIZARD_CONTINUE,\n WIZARD_BACK,\n WIZARD_SET_CURRENT_PAGE,\n CREATE_BUTTON_SUCCESS,\n CREATE_BUTTON_ERROR,\n EDIT_BUTTON_SUCCESS,\n EDIT_BUTTON_ERROR,\n GET_BUTTON_DATA_SUCCESS,\n GET_BUTTON_DATA_ERROR,\n UPDATE_CODE_SNIPPET,\n SHOW_ACTIONABLE_ERROR_MODAL,\n HIDE_ACTIONABLE_ERROR_MODAL,\n SHOW_UNACTIONABLE_ERROR_MODAL,\n HIDE_UNACTIONABLE_ERROR_MODAL,\n SHOW_LEAVE_MODAL,\n HIDE_LEAVE_MODAL,\n SET_ERROR_LOADING_IMAGE,\n RESET_ERROR_LOADING_IMAGE,\n OPEN_MOBILE_PREVIEW,\n CLOSE_MOBILE_PREVIEW,\n UPDATE_IS_MOBILE,\n UPDATE_FLOW_SPEC,\n} from '../actions/actionsButtonFactory';\nimport {\n getNextStep,\n getOptionsForLanguageField,\n getPreviousStep,\n} from '../utils/buttonFactoryUtils';\nimport { getServerProps } from '../utils/serverProps';\nimport _get from 'lodash/get';\nimport { transformServerFormatToClient } from '../lib/buttonModelV3';\n\nconst businessProfileLogoUrl = getSettingsLogoUrl();\n\nconst getDefaultValueForLanguage = () => {\n const serverProps = getServerProps();\n const countryAndLanguageDetails = _get(\n serverProps,\n 'countryAndLanguageDetails'\n );\n const selectedCountry = _get(serverProps, 'selectedCountry');\n const languages = getOptionsForLanguageField(\n countryAndLanguageDetails,\n selectedCountry\n );\n // Get first language\n let language = _get(languages, '[0].value');\n return language || 'en';\n};\n\nexport const LOGO_TARGET_BUTTON = 'BUTTON';\nexport const LOGO_TARGET_PROFILE = 'PROFILE';\nexport const LOGO_TARGET_NOLOGO = 'NOLOGO';\n\nconst defaultButton = {\n accountIdentifierType: 'merchantAccountId',\n allowPrograms: 'No',\n amountType: 'variable',\n amountValue: '',\n business: getServerProps().accountIdentifier.email,\n buttonImageUrl: '',\n buttonSize: 'large',\n countryCode: getServerProps().country,\n coverFeesEnabled: 'yes',\n extraVariables: {},\n extraVariablesView: '',\n itemNumber: '',\n language: getDefaultValueForLanguage(),\n listPrograms: 'no',\n logoTarget: businessProfileLogoUrl ? LOGO_TARGET_PROFILE : LOGO_TARGET_NOLOGO,\n logoUrl: '',\n merchantAmount1: '',\n merchantAmount2: '',\n merchantAmount3: '',\n noAdvancedVariables: 'yes',\n noCancelReturn: 'yes',\n noLogoImage: businessProfileLogoUrl ? 'no' : 'yes',\n noNote: 'no',\n noShipping: 'no',\n receiverName: getServerProps().receiverName,\n programNames: [],\n purpose: '',\n receiverCurrency: getServerProps().primaryCurrency[0],\n recurringEnabled: 'yes',\n businessProfileLogoUrl,\n showAcceptedCardLogos: false,\n uploadNewLogo: 'no',\n useFullPageExperience: 'yes',\n usePaypalButtonStyle: 'yes',\n noBannerImage: 'yes',\n version: '3.0', // just to differntiate the experience where button was created\n};\n\nconst defaultState = {\n currentStep: 1,\n totalSteps: 4,\n busy: true,\n isMobilePreviewOpen: false,\n};\n\n// get logo from business profile first and then payments settings\nfunction getSettingsLogoUrl() {\n const businessImageUrl = _get(getServerProps(), 'businessImageUrls.url'); // business profile\n return businessImageUrl;\n}\n\nfunction getFormattedButton(payload) {\n // organizationName is not stored in BF service\n // fetching from server to make sure it gets pre-filled when user is editing/duplicating a button\n return Object.assign({}, transformServerFormatToClient(payload), {\n receiverName: getServerProps().receiverName,\n language: payload.language,\n offerProgram: payload.offerProgram,\n version: '3.0',\n });\n}\n\nexport const initialState = {\n formattedButton: defaultButton,\n};\n\nexport default function buttonFactoryV3(state = defaultState, action) {\n switch (action.type) {\n case BUTTON_FACTORY_BUSY: {\n return {\n ...state,\n busy: true,\n };\n }\n\n case INITIALIZE_WIZARD: {\n const button = action.payload;\n let clientSideState = initialState;\n if (button) {\n clientSideState = {\n formattedButton: getFormattedButton({\n ...button,\n businessImageUrls: action.businessImageUrls,\n merchantExperienceUrls: action.merchantExperienceUrls,\n }),\n };\n }\n\n return {\n ...state,\n button: action.payload,\n ...clientSideState,\n busy: false,\n };\n }\n\n case WIZARD_CONTINUE: {\n const {\n currentStep,\n formattedButton: { flowType },\n } = state;\n\n return {\n ...state,\n currentStep: getNextStep(currentStep, flowType),\n };\n }\n\n case WIZARD_BACK: {\n const { currentStep } = state;\n\n return {\n ...state,\n currentStep: getPreviousStep(currentStep),\n };\n }\n\n case WIZARD_SET_CURRENT_PAGE: {\n return {\n ...state,\n currentStep: action.payload,\n };\n }\n\n case CREATE_BUTTON_SUCCESS: {\n return {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton({\n ...action.payload,\n businessImageUrls: action.businessImageUrls,\n merchantExperienceUrls: action.merchantExperienceUrls,\n }),\n busy: false,\n error: null,\n isButtonCreated: true,\n };\n }\n\n case CREATE_BUTTON_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n };\n }\n\n case EDIT_BUTTON_SUCCESS: {\n return {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton({\n ...action.payload,\n businessImageUrls: action.businessImageUrls,\n merchantExperienceUrls: action.merchantExperienceUrls,\n }),\n busy: false,\n error: null,\n isButtonCreated: false,\n };\n }\n\n case EDIT_BUTTON_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n isButtonCreated: false,\n };\n }\n\n case GET_BUTTON_DATA_SUCCESS: {\n const newState = {\n ...state,\n button: action.payload,\n formattedButton: getFormattedButton({\n ...action.payload,\n businessImageUrls: action.businessImageUrls,\n merchantExperienceUrls: action.merchantExperienceUrls,\n }),\n busy: false,\n };\n return newState;\n }\n\n case GET_BUTTON_DATA_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n busy: false,\n };\n }\n\n case UPDATE_CODE_SNIPPET: {\n return {\n ...state,\n customVariable: action.payload,\n };\n }\n\n case SHOW_ACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showActionableErrorModal: true,\n };\n }\n\n case HIDE_ACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showActionableErrorModal: false,\n };\n }\n\n case SHOW_UNACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showUnactionableErrorModal: true,\n };\n }\n\n case HIDE_UNACTIONABLE_ERROR_MODAL: {\n return {\n ...state,\n showUnactionableErrorModal: false,\n };\n }\n\n case SHOW_LEAVE_MODAL: {\n return {\n ...state,\n showLeaveModal: true,\n };\n }\n\n case HIDE_LEAVE_MODAL: {\n return {\n ...state,\n showLeaveModal: false,\n };\n }\n\n case SET_ERROR_LOADING_IMAGE: {\n return {\n ...state,\n errorLoadingLogoImage: true,\n };\n }\n\n case RESET_ERROR_LOADING_IMAGE: {\n return {\n ...state,\n errorLoadingLogoImage: false,\n };\n }\n\n case OPEN_MOBILE_PREVIEW: {\n return {\n ...state,\n isMobilePreviewOpen: true,\n };\n }\n\n case CLOSE_MOBILE_PREVIEW: {\n return {\n ...state,\n isMobilePreviewOpen: false,\n };\n }\n\n case UPDATE_IS_MOBILE: {\n return {\n ...state,\n isMobile: action.payload,\n };\n }\n\n case UPDATE_FLOW_SPEC: {\n return {\n ...state,\n totalSteps: action.payload.totalSteps,\n formattedButton: {\n ...state.formattedButton,\n flowType: action.payload.flowType,\n },\n };\n }\n\n default:\n return state;\n }\n}\n","import { getInitialData } from './formator';\nimport get from 'lodash/get';\nimport getContent from 'pp-react-l10n';\n\nconst cache = {};\n\nexport const getTouchpoint = (touchpointCode) => {\n if (cache[touchpointCode]) {\n return cache[touchpointCode];\n }\n const personalizedMessages = getInitialData().personalizedMessages || [];\n\n for (let touchpoint of personalizedMessages) {\n if (touchpoint.touchpoint_code === touchpointCode) {\n cache[touchpointCode] = touchpoint;\n return touchpoint;\n }\n }\n return null;\n};\n\nexport const getPersonalizedMessages = (\n touchpointCode,\n { merge = false, isHtml = true, includeImpressionUrl = false } = {}\n) => {\n const touchpoint = getTouchpoint(touchpointCode);\n if (!touchpoint || !touchpoint.messages) {\n return merge ? [] : {};\n }\n\n if (merge) {\n const messages = [];\n touchpoint.messages.forEach((message) => {\n if (message.content?.json) {\n Object.keys(message.content.json)\n .sort()\n .forEach((contentKey) => {\n if (isHtml) {\n messages.push(\n getContent(\n `personalized.${touchpointCode}.${contentKey}`,\n null,\n {\n useHTML: true,\n }\n ),\n ' '\n );\n } else {\n messages.push(message.content.json[contentKey]);\n }\n });\n }\n });\n return messages;\n }\n\n let messages = {};\n touchpoint.messages.forEach((message) => {\n if (message.content?.json) {\n Object.keys(message.content.json).forEach((contentKey) => {\n messages[contentKey] = isHtml\n ? getContent(`personalized.${touchpointCode}.${contentKey}`, null, {\n useHTML: true,\n })\n : message.content.json[contentKey];\n });\n }\n if (includeImpressionUrl) {\n messages = {\n content: messages,\n trackingDetails: {\n impressionUrl: message.tracking_details.impression_url,\n },\n };\n }\n });\n return messages;\n};\n\nexport const hasPersonalizedMessages = (touchpointCode) => {\n const touchpoint = getTouchpoint(touchpointCode);\n return touchpoint?.messages[0]?.content?.json;\n};\n\nexport const getPersonalizedMessagesAsContentLoaderStandard = () => {\n const personalizedMessages = getInitialData().personalizedMessages || [];\n const result = {};\n for (let touchpoint of personalizedMessages) {\n result[touchpoint.touchpoint_code] = get(\n touchpoint,\n 'messages[0].content.json',\n {}\n );\n }\n return result;\n};\n","import _get from 'lodash/get';\nimport { fetcher } from '../../../utility/domUtils';\n\nexport const CREATE_DEFAULT_BUTTON = 'CREATE_DEFAULT_BUTTON';\nexport const CREATE_DEFAULT_BUTTON_SUCCESS = 'CREATE_DEFAULT_BUTTON_SUCCESS';\nexport const CREATE_DEFAULT_BUTTON_ERROR = 'CREATE_DEFAULT_BUTTON_ERROR';\nexport const DELETE_BUTTON = 'DELETE_BUTTON';\nexport const DELETE_BUTTON_SUCCESS = 'DELETE_BUTTON_SUCCESS';\nexport const DELETE_BUTTON_ERROR = 'DELETE_BUTTON_ERROR';\nexport const GET_BUTTON = 'GET_BUTTON';\nexport const GET_BUTTON_SUCCESS = 'GET_BUTTON_SUCCESS';\nexport const GET_BUTTON_ERROR = 'GET_BUTTON_ERROR';\nexport const UPDATE_VOUCHER_LISTING_STATUS = 'UPDATE_VOUCHER_LISTING_STATUS';\nexport const UPDATE_VOUCHER_LISTING_STATUS_SUCCESS =\n 'UPDATE_VOUCHER_LISTING_STATUS_SUCCESS';\nexport const UPDATE_VOUCHER_LISTING_STATUS_ERROR =\n 'UPDATE_VOUCHER_LISTING_STATUS_ERROR';\n\nexport function deleteButton(buttonId, offerProgramId) {\n return (dispatch, getState) => {\n dispatch({\n type: DELETE_BUTTON,\n });\n\n let fetchURL = `/donate/api/buttons/${buttonId}`;\n\n // if we have offerProgramId then append into the URL\n if (offerProgramId) {\n fetchURL = `${fetchURL}/${offerProgramId}`;\n }\n\n let resParams = {};\n return fetcher(fetchURL, {\n method: 'DELETE',\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n dispatch({\n type: DELETE_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n }\n dispatch({\n type: DELETE_BUTTON_SUCCESS,\n payload: responseJson,\n });\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n dispatch({\n type: DELETE_BUTTON_ERROR,\n payload: {\n error,\n },\n });\n return error;\n });\n };\n}\n\nexport function getButton(id) {\n return (dispatch, getState) => {\n dispatch({\n type: GET_BUTTON,\n });\n\n let resParams = {};\n return fetcher(`/donate/api/buttons/${id}`, {\n method: 'GET',\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n dispatch({\n type: GET_BUTTON_ERROR,\n payload: { error },\n });\n\n return error;\n }\n const button = _get(responseJson, 'button');\n\n dispatch({\n type: GET_BUTTON_SUCCESS,\n payload: button,\n });\n\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n dispatch({\n type: GET_BUTTON_ERROR,\n payload: { error },\n });\n\n return error;\n });\n };\n}\n\nexport function updateVoucherListingStatus(isToList, button) {\n return (dispatch, getState) => {\n const payload = {\n isToList,\n button,\n };\n\n dispatch({\n type: UPDATE_VOUCHER_LISTING_STATUS,\n });\n\n let resParams = {};\n return fetcher(`/donate/api/voucher_variant/${button.voucherVariant.id}`, {\n method: 'PUT',\n body: JSON.stringify({\n payload,\n }),\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n dispatch({\n type: UPDATE_VOUCHER_LISTING_STATUS_ERROR,\n payload: { error },\n });\n return error;\n }\n dispatch({\n type: UPDATE_VOUCHER_LISTING_STATUS_SUCCESS,\n payload: responseJson,\n });\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n dispatch({\n type: UPDATE_VOUCHER_LISTING_STATUS_ERROR,\n payload: { error },\n });\n\n return error;\n });\n };\n}\n","import { appendCdnHostName } from '../../../../utility/geoUtils';\n\nexport const VOUCHER_TYPE_CUSTOM = 'custom';\nexport const VOUCHER_TYPE_DISCOUNT = 'discount';\nexport const VOUCHER_TYPE_PERCENTAGE = 'percentage';\nexport const VOUCHER_TYPE_DOLLAR = 'dollar';\n\nexport const ALL_VOUCHER_TYPE_INFO = [\n {\n type: VOUCHER_TYPE_PERCENTAGE,\n },\n {\n type: VOUCHER_TYPE_DOLLAR,\n },\n {\n type: VOUCHER_TYPE_CUSTOM,\n },\n];\n\nexport const VOUCHER_INFO_TAGLINE = 'tagline';\nexport const VOUCHER_INFO_DETAILS = 'details';\n\nexport const VOUCHER_MAX_CHAR_LENGTH = 127;\nexport const MESSAGE_TO_DONORS_MAX_BYTE_LENGTH = 127;\nexport const VOUCHER_MAX_FILE_SIZE = 2000000; // 2MB\nexport const ALLOWED_FILE_EXTENSIONS = ['jpg', 'gif', 'png'];\nexport const ALLOWED_FILE_TYPES = ['image/jpeg', 'image/gif', 'image/png'];\nexport const MESSAGE_INTERPOLATION_KEY = '{businessName}';\n\nexport const VOUCHER_INPUT_FIXED = 'FIXED';\nexport const VOUCHER_INPUT_PERCENTAGE = 'PERCENTAGE';\nexport const VOUCHER_INPUT_CUSTOM = 'CUSTOM';\nexport const VOUCHER_DISCOUNT_DEFAULT_VALUE = 5;\n\nexport const GENERIC_VOUCHER_FLOW = 'generic';\nexport const DEFAULT_LOGO_URL = appendCdnHostName(\n '/ppcp/images/covid/donations@x600.png'\n);\nexport const DISPLAY_DEFAULT_MERCHANT_NAME = 'Acme Inc';\n\nexport const INVALID_ADDRESS_ERROR = 'INVALID_ADDRESS';\n","import { normalizeNumber } from '../../../utils/amountUtils';\nimport {\n VOUCHER_TYPE_DOLLAR,\n VOUCHER_INPUT_FIXED,\n VOUCHER_TYPE_PERCENTAGE,\n VOUCHER_INPUT_PERCENTAGE,\n VOUCHER_TYPE_CUSTOM,\n VOUCHER_INPUT_CUSTOM,\n VOUCHER_MAX_CHAR_LENGTH,\n} from './voucherConstants';\nimport get from 'lodash/get';\n\nexport const isGmbFlow = (bn) => {\n return bn && bn.toLowerCase() === 'gmb';\n};\n\nexport const isGenericFlow = (bn) => {\n return !isGmbFlow(bn);\n};\n\nexport const isInputTextValid = (inputToTest) => {\n // valid if character does not matches '<' '>' - to validate against scripting\n return inputToTest.match('^[^<>]*$');\n};\n\nexport const isVoucherAmountInRange = (stringToTest, allowDecimals = true) => {\n // checks for value between 1 and 100,\n // & optionally allows for decimal numbers with up to 2 decimals\n const decimalsRegexPattern = '(\\\\.?|(\\\\.[0-9]{1,2})?)';\n const valueBetweenOand100Pattern = `^([1-9][0-9]?)${\n allowDecimals ? decimalsRegexPattern : ''\n }$|^100$`;\n const valueWithInLimit = new RegExp(valueBetweenOand100Pattern);\n // normalize number to en-US to do regex strict regex validation\n const normalizedNumber = normalizeNumber(stringToTest);\n return !isNaN(normalizedNumber) && valueWithInLimit.test(normalizedNumber);\n};\n\nexport const areVoucherDetailsComplete = (\n voucherInfo,\n selectedVoucherDetails,\n postalCodeValidationPattern,\n isZipcodeRequired\n) => {\n const { zipcode, isOnAgreement } = voucherInfo;\n const { value, details, type } = selectedVoucherDetails;\n const validZipCode = zipcode && zipcode.match(postalCodeValidationPattern);\n const validTagLine =\n value &&\n ((!isNaN(parseFloat(value, 10)) &&\n isVoucherAmountInRange(\n value,\n type === VOUCHER_TYPE_PERCENTAGE ? false : true\n )) ||\n (isNaN(parseFloat(value, 10)) && value.length < VOUCHER_MAX_CHAR_LENGTH));\n const validDetails =\n !details || (details && details.length <= VOUCHER_MAX_CHAR_LENGTH);\n return (\n validTagLine &&\n validDetails &&\n (validZipCode || !isZipcodeRequired) &&\n isOnAgreement\n );\n};\n\nexport const voucherTypeToInputTypeMapping = [\n {\n voucherType: VOUCHER_TYPE_DOLLAR,\n voucherInputType: VOUCHER_INPUT_FIXED,\n },\n {\n voucherType: VOUCHER_TYPE_PERCENTAGE,\n voucherInputType: VOUCHER_INPUT_PERCENTAGE,\n },\n {\n voucherType: VOUCHER_TYPE_CUSTOM,\n voucherInputType: VOUCHER_INPUT_CUSTOM,\n },\n];\n\nexport const getVoucherDetail = (button) => {\n const voucherAdded = !!get(button, 'offerProgram');\n if (voucherAdded) {\n const { type, value } = get(\n button,\n 'offerProgram.computation_rules[0].offer_value'\n );\n const { description: voucherDetails, sub_title: discountTagline } = get(\n button,\n 'offerProgram.localized_attributes[0]'\n );\n const voucherType = voucherTypeToInputTypeMapping.find((vType) => {\n let voucherInputType = VOUCHER_INPUT_PERCENTAGE;\n if (type !== VOUCHER_INPUT_PERCENTAGE) {\n voucherInputType =\n value === 0 ? VOUCHER_INPUT_CUSTOM : VOUCHER_INPUT_FIXED;\n }\n return vType.voucherInputType === voucherInputType;\n }).voucherType;\n let voucherValue = discountTagline;\n if (value !== 0) {\n voucherValue = type === VOUCHER_INPUT_FIXED ? value / 100 : value;\n }\n\n return {\n voucherType,\n voucherValue,\n voucherDetails,\n discountTagline,\n };\n }\n\n return {};\n};\n\nexport const getAllVoucherTypeInfo = (voucherDetail, state = {}) => {\n const { voucherType, voucherValue, voucherDetails, discountTagline } =\n voucherDetail;\n const allVoucherTypeInfo = [\n { type: VOUCHER_TYPE_DOLLAR },\n { type: VOUCHER_TYPE_PERCENTAGE },\n { type: VOUCHER_TYPE_CUSTOM },\n ];\n const typeToUpdate = voucherType || state.selectedVoucherType;\n const voucherInfoIndexToUpdate = allVoucherTypeInfo.findIndex(\n (voucherInfo) => voucherInfo?.type === typeToUpdate\n );\n const updatedVoucherInfo = allVoucherTypeInfo[voucherInfoIndexToUpdate] || {};\n if (voucherValue !== undefined) {\n updatedVoucherInfo.value = voucherValue;\n updatedVoucherInfo.tagline =\n typeToUpdate === VOUCHER_TYPE_CUSTOM ? voucherValue : discountTagline;\n }\n\n if (voucherDetails !== undefined) {\n updatedVoucherInfo.details = voucherDetails;\n }\n\n allVoucherTypeInfo.splice(voucherInfoIndexToUpdate, 1, updatedVoucherInfo);\n\n return allVoucherTypeInfo;\n};\n","import { getServerProps } from '../utils/serverProps';\nimport _map from 'lodash/map';\n\nimport {\n CHECK_EMAIL_CONFIRMED_RESPONSE,\n SHOW_UNKNOWN_ERROR_OCCURED,\n HIDE_UNKNOWN_ERROR_OCCURED,\n SHOW_COUNTRY_NOT_SUPPORTED,\n HIDE_COUNTRY_NOT_SUPPORTED,\n UPDATE_BUSINESS_IMAGE_URLS,\n UPDATE_IS_MOBILE,\n} from '../components/partner/actionsPartner';\n\nconst defaultState = {\n ...getServerProps(),\n receivableCurrency: _map(getServerProps().receivableCurrency, (currency) => {\n return {\n value: currency,\n displayValue: currency,\n };\n }),\n};\n\nexport default function application(state = defaultState, action = {}) {\n switch (action.type) {\n case CHECK_EMAIL_CONFIRMED_RESPONSE: {\n const isEmailConfirmed = action.payload === true;\n return {\n ...state,\n isEmailConfirmed,\n };\n }\n case SHOW_COUNTRY_NOT_SUPPORTED: {\n return {\n ...state,\n countryNotSupported: true,\n };\n }\n\n case HIDE_COUNTRY_NOT_SUPPORTED: {\n return {\n ...state,\n countryNotSupported: false,\n };\n }\n\n case SHOW_UNKNOWN_ERROR_OCCURED: {\n return {\n ...state,\n unknownError: true,\n };\n }\n\n case HIDE_UNKNOWN_ERROR_OCCURED: {\n return {\n ...state,\n unknownError: false,\n };\n }\n\n case UPDATE_BUSINESS_IMAGE_URLS: {\n return {\n ...state,\n businessImageUrls: {\n ...state.businessImageUrls,\n url: action.url,\n },\n };\n }\n\n case UPDATE_IS_MOBILE: {\n return {\n ...state,\n isMobile: action.isMobile,\n };\n }\n\n default:\n return state;\n }\n}\n","import { transformClientFormatToServer } from '../../lib/buttonModel';\nimport { defaultButton } from '../../reducers/reducerButtonFactory';\nimport _get from 'lodash/get';\nimport { voucherTypeToInputTypeMapping } from './utils/partnerUtils';\nimport {\n VOUCHER_TYPE_CUSTOM,\n INVALID_ADDRESS_ERROR,\n} from './utils/voucherConstants';\nimport { normalizeNumber } from '../../utils/amountUtils';\nimport { fetcher } from '../../../utility/domUtils';\n\nexport const CREATE_DEFAULT_BUTTON = 'CREATE_DEFAULT_BUTTON';\nexport const CREATE_DEFAULT_BUTTON_SUCCESS = 'CREATE_DEFAULT_BUTTON_SUCCESS';\nexport const CREATE_DEFAULT_BUTTON_ERROR = 'CREATE_DEFAULT_BUTTON_ERROR';\nexport const EMAIL_CONFIRM_RESEND = 'EMAIL_CONFIRM_RESEND';\nexport const EMAIL_SEND_SUCCESS = 'EMAIL_SEND_SUCCESS';\nexport const EMAIL_SEND_SUCCESS_RESET = 'EMAIL_SENT_SUCCESSFULLY';\nexport const EMAIL_SEND_ERROR = 'EMAIL_SEND_ERROR';\nexport const CHECK_EMAIL_CONFIRMED = 'CHECK_EMAIL_CONFIRMED';\nexport const CHECK_EMAIL_CONFIRMED_RESPONSE = 'CHECK_EMAIL_CONFIRMED_RESPONSE';\nexport const CHECK_EMAIL_CONFIRMED_ERROR = 'CHECK_EMAIL_CONFIRMED_ERROR';\nexport const SET_VERIFY_EMAIL_MODAL_OPEN = 'SET_VERIFY_EMAIL_MODAL_OPEN';\nexport const UPDATE_MESSAGE = 'UPDATE_MESSAGE';\nexport const UPDATE_STEP = 'UPDATE_STEP';\nexport const SHOW_UNKNOWN_ERROR_OCCURED = 'SHOW_UNKNOWN_ERROR_OCCURED';\nexport const HIDE_UNKNOWN_ERROR_OCCURED = 'HIDE_UNKNOWN_ERROR_OCCURED';\nexport const SHOW_COUNTRY_NOT_SUPPORTED = 'SHOW_COUNTRY_NOT_SUPPORTED';\nexport const HIDE_COUNTRY_NOT_SUPPORTED = 'HIDE_COUNTRY_NOT_SUPPORTED';\nexport const TOGGLE_ADD_VOUCHER = 'TOGGLE_ADD_VOUCHER';\nexport const UPDATE_VOUCHER_DETAILS = 'UPDATE_VOUCHER_DETAILS';\nexport const UPDATE_VOUCHER_ZIPCODE = 'UPDATE_VOUCHER_ZIPCODE';\nexport const UPDATE_AGREEMENT = 'UPDATE_AGREEMENT';\nexport const UPDATE_BUSINESS_IMAGE_URLS = 'UPDATE_BUSINESS_IMAGE_URLS';\nexport const ADD_MERCHANT_FOOTER = 'ADD_MERCHANT_FOOTER';\nexport const UPDATE_SELECTED_VOUCHER_TYPE = 'UPDATE_SELECTED_VOUCHER_TYPE';\nexport const UPDATE_IS_MOBILE = 'UPDATE_IS_MOBILE';\n\n/**\n * DOES_NOT create a default button as the API is WIP\n * Instead, creates a Button with the parameters passed\n */\nexport function createDefaultButton(\n bnCode,\n messageToDonors,\n presetAmounts,\n addVoucher = false,\n additionalVoucherInfo = {}\n) {\n const buttonDataServerFormat = transformClientFormatToServer(defaultButton);\n const {\n voucherInfo,\n organizationName,\n businessImageUrls,\n country,\n isCountrySupportedForFbUpload,\n } = additionalVoucherInfo;\n const payload = {\n button: buttonDataServerFormat,\n default: 'true',\n bn: bnCode,\n purpose: messageToDonors,\n amount_options: presetAmounts,\n businessName: organizationName,\n imageData: {\n url: businessImageUrls && businessImageUrls.url,\n name: 'custom-donation-logo.png',\n },\n };\n\n if (addVoucher && voucherInfo) {\n const discountType = voucherTypeToInputTypeMapping.find(\n (mapping) => mapping.voucherType === voucherInfo.type\n ).voucherInputType;\n const discountValue =\n voucherInfo.type === VOUCHER_TYPE_CUSTOM\n ? 0\n : normalizeNumber(voucherInfo.value);\n\n payload.hasVoucher = addVoucher;\n payload.isCountrySupportedForFbUpload = isCountrySupportedForFbUpload;\n payload.voucherInput = {\n discountValue,\n discountType,\n offerTagline: voucherInfo.tagline,\n offerDetails: voucherInfo.details,\n address: {\n postal_code: voucherInfo.zipcode,\n country_code: country,\n },\n };\n }\n\n return (dispatch, getState) => {\n dispatch({\n type: CREATE_DEFAULT_BUTTON,\n });\n\n let resParams = {};\n return fetcher('/donate/api/buttons', {\n method: 'POST',\n body: JSON.stringify(payload),\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.json();\n })\n .then((responseJson) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: responseJson,\n ...resParams,\n };\n if (\n addVoucher &&\n responseJson &&\n responseJson.status === 400 &&\n _get(responseJson, 'responseJSON.button.message') &&\n _get(responseJson, 'responseJSON.button.message').includes(\n 'Invalid address'\n )\n ) {\n dispatch({\n type: CREATE_DEFAULT_BUTTON_ERROR,\n error: INVALID_ADDRESS_ERROR,\n });\n } else {\n dispatch(showUnknownErrorOccured());\n dispatch({\n type: CREATE_DEFAULT_BUTTON_ERROR,\n error,\n });\n }\n return error;\n }\n const button = _get(responseJson, 'button');\n const offerProgramVariable = button.button_variables.filter(\n (variable) => {\n return variable.name === 'srt';\n }\n );\n const offerProgramCode = button && button.offerProgramCode;\n const offerProgramId =\n offerProgramVariable.length > 0 ? offerProgramVariable[0].value : '';\n dispatch({\n type: CREATE_DEFAULT_BUTTON_SUCCESS,\n payload: {\n id: responseJson && responseJson.button && responseJson.button.id,\n bnCode: bnCode,\n offerProgramId,\n offerProgramCode,\n },\n });\n return { ...responseJson, ok: resParams.ok };\n })\n .catch((error) => {\n if (\n addVoucher &&\n error &&\n error.status === 400 &&\n _get(error, 'responseJSON.button.message') &&\n _get(error, 'responseJSON.button.message').includes('Invalid address')\n ) {\n dispatch({\n type: CREATE_DEFAULT_BUTTON_ERROR,\n error: INVALID_ADDRESS_ERROR,\n });\n } else {\n dispatch(showUnknownErrorOccured());\n dispatch({\n type: CREATE_DEFAULT_BUTTON_ERROR,\n error,\n });\n }\n return error;\n });\n };\n}\n\nexport const openVerifyEmailModal = () => (dispatch) => {\n dispatch({ type: SET_VERIFY_EMAIL_MODAL_OPEN });\n};\n\nexport const checkIfEmailConfirmed = () => (dispatch) => {\n const url = '/donate/api/buttons/partner/confirmEmail';\n dispatch({ type: CHECK_EMAIL_CONFIRMED });\n\n let resParams = {};\n fetcher(url, {\n method: 'POST',\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.text();\n })\n .then((responseJson) => {\n const response = JSON.parse(responseJson);\n if (!resParams.ok) {\n const error = {\n responseJSON: response,\n ...resParams,\n };\n\n dispatch({ type: SHOW_UNKNOWN_ERROR_OCCURED });\n dispatch({ type: CHECK_EMAIL_CONFIRMED_ERROR, payload: error });\n } else if (response && typeof response.isEmailConfirmed !== 'undefined') {\n dispatch({\n type: CHECK_EMAIL_CONFIRMED_RESPONSE,\n payload: response.isEmailConfirmed,\n });\n } else {\n let stringifiedRes;\n try {\n JSON.stringify(response);\n } catch (err) {\n stringifiedRes = undefined;\n }\n dispatch({ type: SHOW_UNKNOWN_ERROR_OCCURED });\n dispatch({\n type: CHECK_EMAIL_CONFIRMED_ERROR,\n payload:\n 'isEmailConfirmed lacking in response. Response:' + stringifiedRes,\n });\n }\n })\n .catch((error) => {\n dispatch({ type: SHOW_UNKNOWN_ERROR_OCCURED });\n dispatch({ type: CHECK_EMAIL_CONFIRMED_ERROR, payload: error });\n });\n};\n\nexport const resendEmail = () => (dispatch) => {\n const url = '/donate/api/buttons/partner/resendEmail';\n dispatch({ type: EMAIL_CONFIRM_RESEND });\n\n let resParams = {};\n fetcher(url, {\n method: 'POST',\n })\n .then((response) => {\n resParams = {\n ...resParams,\n status: response.status,\n statusText: response.statusText,\n ok: response.ok,\n };\n return response.text();\n })\n .then((res) => {\n if (!resParams.ok) {\n const error = {\n responseJSON: res,\n ...resParams,\n };\n dispatch({ type: SHOW_UNKNOWN_ERROR_OCCURED });\n dispatch({ type: EMAIL_SEND_ERROR, payload: error });\n } else {\n dispatch({ type: EMAIL_SEND_SUCCESS });\n setTimeout(() => {\n dispatch({ type: EMAIL_SEND_SUCCESS_RESET });\n }, 3500);\n }\n })\n .catch((error) => {\n dispatch({ type: SHOW_UNKNOWN_ERROR_OCCURED });\n dispatch({ type: EMAIL_SEND_ERROR, payload: error });\n });\n};\n\nexport function updateMessage(message) {\n return {\n type: UPDATE_MESSAGE,\n message,\n };\n}\n\nexport function updateStep(step) {\n return {\n type: UPDATE_STEP,\n step,\n };\n}\n\nexport function showUnknownErrorOccured() {\n return {\n type: SHOW_UNKNOWN_ERROR_OCCURED,\n };\n}\n\nexport function hideUnknownErrorOccured() {\n return {\n type: HIDE_UNKNOWN_ERROR_OCCURED,\n };\n}\n\nexport function showCountryNotSupported() {\n return {\n type: SHOW_COUNTRY_NOT_SUPPORTED,\n };\n}\n\nexport function hideCountryNotSupported() {\n return {\n type: HIDE_COUNTRY_NOT_SUPPORTED,\n };\n}\n\nexport function toggleAddVoucher() {\n return {\n type: TOGGLE_ADD_VOUCHER,\n };\n}\n\nexport function updateVoucherDetails({\n voucherType,\n voucherValue,\n voucherDetails,\n discountTagline,\n}) {\n return {\n type: UPDATE_VOUCHER_DETAILS,\n payload: {\n voucherType,\n voucherValue,\n voucherDetails,\n discountTagline,\n },\n };\n}\n\nexport function updateSelectedVoucherType({ voucherType }) {\n return {\n type: UPDATE_SELECTED_VOUCHER_TYPE,\n voucherType,\n };\n}\n\nexport function updateVoucherZipCode(zipcode) {\n return {\n type: UPDATE_VOUCHER_ZIPCODE,\n zipcode,\n };\n}\n\nexport function updateVoucherAgreement(isOnAgreement) {\n return {\n type: UPDATE_AGREEMENT,\n isOnAgreement,\n };\n}\n\nexport function updateBusinessImageUrls(url) {\n return {\n type: UPDATE_BUSINESS_IMAGE_URLS,\n url,\n };\n}\n\nexport function updateIsMobile(isMobile) {\n return {\n type: UPDATE_IS_MOBILE,\n isMobile,\n };\n}\n\nexport function addMerchantFooter(merchantFooter) {\n return {\n type: ADD_MERCHANT_FOOTER,\n merchantFooter,\n };\n}\n","const STAGE_HOSTNAME = 'https://www.msmaster.qa.paypal.com';\n\nexport function getHost() {\n const { host, protocol } = window.location;\n return host.includes('localhost') ? STAGE_HOSTNAME : `${protocol}//${host}`;\n}\n","import get from 'lodash/get';\nimport {\n CREATE_DEFAULT_BUTTON_SUCCESS,\n CREATE_DEFAULT_BUTTON_ERROR,\n EMAIL_CONFIRM_RESEND,\n EMAIL_SEND_SUCCESS,\n EMAIL_SEND_ERROR,\n CHECK_EMAIL_CONFIRMED_RESPONSE,\n CHECK_EMAIL_CONFIRMED_ERROR,\n CHECK_EMAIL_CONFIRMED,\n SET_VERIFY_EMAIL_MODAL_OPEN,\n UPDATE_MESSAGE,\n UPDATE_STEP,\n EMAIL_SEND_SUCCESS_RESET,\n CREATE_DEFAULT_BUTTON,\n TOGGLE_ADD_VOUCHER,\n UPDATE_VOUCHER_DETAILS,\n UPDATE_VOUCHER_ZIPCODE,\n UPDATE_AGREEMENT,\n ADD_MERCHANT_FOOTER,\n UPDATE_SELECTED_VOUCHER_TYPE,\n} from './actionsPartner';\nimport { getHost } from './helpers';\nimport { getParameterByName } from '../../../utility/queryStringHelper';\nimport { isGmbFlow } from './utils/partnerUtils';\nimport {\n VOUCHER_TYPE_CUSTOM,\n VOUCHER_TYPE_PERCENTAGE,\n ALL_VOUCHER_TYPE_INFO,\n} from './utils/voucherConstants';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { getServerProps } from '../../utils/serverProps';\n\nconst content = getLocaleMessages('buttons/partner');\nconst { inputField: { placeholder } = {}, voucher = {} } = content;\n\nconst { isGMBVoucherTestGroup } = getServerProps();\nconst bnCode = (getParameterByName('bn') || '').toLowerCase();\nconst showVoucherFlow = !(isGmbFlow(bnCode) && !isGMBVoucherTestGroup);\nconst initialMessageValue = showVoucherFlow\n ? get(voucher, 'step1.inputSection.message.placeholder')\n : placeholder;\n\nconst initialState = {\n step: 0,\n message: initialMessageValue,\n addVoucher: false,\n selectedVoucherType: VOUCHER_TYPE_PERCENTAGE,\n allVoucherTypeInfo: ALL_VOUCHER_TYPE_INFO,\n voucherInfo: {},\n showVoucherFlow,\n bnCode,\n voucherContent: voucher,\n};\n\nexport default function partnerButtons(state = initialState, action = {}) {\n switch (action.type) {\n case CREATE_DEFAULT_BUTTON_SUCCESS: {\n const buttonId = action.payload.id;\n const offerProgramId = action.payload.offerProgramId;\n const offerProgramCode = action.payload.offerProgramCode;\n const shortUrl = `${getHost()}/biz/fund?id=${buttonId}`;\n return {\n ...state,\n shortUrl,\n id: buttonId,\n offerProgramId,\n offerProgramCode,\n step: 2,\n isSending: false,\n error: '',\n };\n }\n case CREATE_DEFAULT_BUTTON_ERROR: {\n return {\n ...state,\n error: action.error,\n isSending: false,\n };\n }\n case CREATE_DEFAULT_BUTTON: {\n return {\n ...state,\n isSending: true,\n };\n }\n case EMAIL_CONFIRM_RESEND: {\n return {\n ...state,\n isSending: true,\n };\n }\n case EMAIL_SEND_SUCCESS: {\n return {\n ...state,\n isSending: false,\n confirmEmailSent: true,\n };\n }\n case EMAIL_SEND_SUCCESS_RESET: {\n return {\n ...state,\n isSending: false,\n confirmEmailSent: false,\n };\n }\n case EMAIL_SEND_ERROR: {\n return {\n ...state,\n isSending: false,\n emailSendError: action.payload,\n verifyEmailModalOpen: false,\n };\n }\n case CHECK_EMAIL_CONFIRMED_RESPONSE: {\n return {\n ...state,\n verifyEmailModalOpen: false,\n isSending: false,\n };\n }\n case CHECK_EMAIL_CONFIRMED: {\n return {\n ...state,\n isSending: true,\n };\n }\n case SET_VERIFY_EMAIL_MODAL_OPEN: {\n return {\n ...state,\n verifyEmailModalOpen: true,\n };\n }\n case CHECK_EMAIL_CONFIRMED_ERROR: {\n return {\n ...state,\n checkIfEmailConfirmedError: true,\n isSending: false,\n verifyEmailModalOpen: false,\n };\n }\n\n case UPDATE_MESSAGE: {\n return {\n ...state,\n message: action.message,\n };\n }\n\n case UPDATE_STEP: {\n return {\n ...state,\n step: action.step,\n };\n }\n\n case TOGGLE_ADD_VOUCHER: {\n return {\n ...state,\n addVoucher: !state.addVoucher,\n };\n }\n\n case UPDATE_VOUCHER_DETAILS: {\n const { voucherType, voucherValue, voucherDetails, discountTagline } =\n action.payload;\n const allVoucherTypeInfo = [...state.allVoucherTypeInfo];\n const typeToUpdate = voucherType || state.selectedVoucherType;\n const voucherInfoIndexToUpdate = allVoucherTypeInfo.findIndex(\n (voucherInfo) => voucherInfo.type === typeToUpdate\n );\n const updatedVoucherInfo = allVoucherTypeInfo[voucherInfoIndexToUpdate];\n if (voucherValue !== undefined) {\n updatedVoucherInfo.value = voucherValue;\n updatedVoucherInfo.tagline =\n typeToUpdate === VOUCHER_TYPE_CUSTOM ? voucherValue : discountTagline;\n }\n\n if (voucherDetails !== undefined) {\n updatedVoucherInfo.details = voucherDetails;\n }\n\n allVoucherTypeInfo.splice(\n voucherInfoIndexToUpdate,\n 1,\n updatedVoucherInfo\n );\n return {\n ...state,\n allVoucherTypeInfo,\n };\n }\n\n case UPDATE_SELECTED_VOUCHER_TYPE: {\n return {\n ...state,\n selectedVoucherType: action.voucherType,\n };\n }\n\n case UPDATE_VOUCHER_ZIPCODE: {\n return {\n ...state,\n voucherInfo: {\n ...state.voucherInfo,\n zipcode: action.zipcode,\n },\n };\n }\n\n case UPDATE_AGREEMENT: {\n return {\n ...state,\n voucherInfo: {\n ...state.voucherInfo,\n isOnAgreement: action.isOnAgreement,\n },\n };\n }\n\n case ADD_MERCHANT_FOOTER: {\n return {\n ...state,\n merchantFooter: action.merchantFooter,\n };\n }\n\n default:\n return state;\n }\n}\n","import { transformServerFormatToClient } from '../../lib/buttonModelV3';\nimport { getServerProps } from '../../utils/serverProps';\nimport {\n CREATE_DEFAULT_BUTTON,\n CREATE_DEFAULT_BUTTON_SUCCESS,\n CREATE_DEFAULT_BUTTON_ERROR,\n DELETE_BUTTON,\n DELETE_BUTTON_SUCCESS,\n DELETE_BUTTON_ERROR,\n GET_BUTTON,\n GET_BUTTON_SUCCESS,\n GET_BUTTON_ERROR,\n UPDATE_VOUCHER_LISTING_STATUS,\n UPDATE_VOUCHER_LISTING_STATUS_SUCCESS,\n UPDATE_VOUCHER_LISTING_STATUS_ERROR,\n} from './actionsManager';\n\nconst defaultState = {\n busy: true,\n};\n\nfunction getFormattedButton(payload) {\n // organizationName is not stored in BF service\n // fetching from server to make sure it gets pre-filled when user is editing/duplicating a button\n return Object.assign({}, transformServerFormatToClient(payload), {\n receiverName: getServerProps().receiverName,\n language: payload.language,\n offerProgram: payload.offerProgram,\n });\n}\n\nexport default function buttonManagerV3(state = defaultState, action) {\n switch (action.type) {\n case CREATE_DEFAULT_BUTTON: {\n return {\n ...state,\n isSending: true,\n busy: false,\n };\n }\n\n case CREATE_DEFAULT_BUTTON_SUCCESS: {\n return {\n ...state,\n isSending: false,\n busy: false,\n };\n }\n\n case CREATE_DEFAULT_BUTTON_ERROR: {\n return {\n ...state,\n error: action.error,\n isSending: false,\n busy: false,\n };\n }\n\n case GET_BUTTON: {\n return {\n ...state,\n isSending: true,\n busy: true,\n };\n }\n\n case GET_BUTTON_SUCCESS: {\n const button = action.payload;\n const formattedButton = getFormattedButton({\n ...button,\n businessImageUrls: action.businessImageUrls,\n merchantExperienceUrls: action.merchantExperienceUrls,\n });\n\n return {\n ...state,\n button,\n formattedButton,\n isSending: false,\n busy: false,\n };\n }\n\n case GET_BUTTON_ERROR: {\n const { error } = action.payload;\n\n return {\n ...state,\n error,\n isSending: false,\n busy: false,\n };\n }\n\n case DELETE_BUTTON: {\n return {\n ...state,\n isSending: true,\n busy: false,\n };\n }\n\n case DELETE_BUTTON_SUCCESS: {\n return {\n ...state,\n isSending: false,\n busy: false,\n };\n }\n\n case DELETE_BUTTON_ERROR: {\n return {\n ...state,\n error: action.error,\n isSending: false,\n busy: false,\n };\n }\n\n case UPDATE_VOUCHER_LISTING_STATUS: {\n return {\n ...state,\n isSending: true,\n busy: true,\n };\n }\n\n case UPDATE_VOUCHER_LISTING_STATUS_SUCCESS: {\n return {\n ...state,\n isSending: false,\n busy: false,\n };\n }\n\n case UPDATE_VOUCHER_LISTING_STATUS_ERROR: {\n return {\n ...state,\n error: action.error,\n isSending: false,\n busy: false,\n };\n }\n\n default:\n return state;\n }\n}\n","import buttonFactoryV3 from './reducerButtonFactoryV3';\nimport application from './reducerApplication';\nimport partnerButtons from '../components/partner/reducerPartner';\nimport buttonManagerV3 from '../componentsV3/buttonManager/reducerManager';\nimport { reducer as reduxFormReducer } from 'redux-form';\n\nconst customReducer = (state = {}, action) => {\n const businessImageUrls = state?.application?.businessImageUrls;\n const merchantExperienceUrls = state?.application?.merchantExperienceUrls;\n return {\n application: application(state.application, action),\n\n buttonFactoryV3: buttonFactoryV3(state.buttonFactoryV3, {\n ...action,\n businessImageUrls,\n merchantExperienceUrls,\n }),\n buttonManagerV3: buttonManagerV3(state.buttonManagerV3, {\n ...action,\n businessImageUrls,\n merchantExperienceUrls,\n }),\n partnerButtons: partnerButtons(state.partnerButtons, action),\n form: reduxFormReducer(state.form, action),\n };\n};\n\nexport default customReducer;\n","import { Dispatcher } from 'flux';\nimport assign from 'object-assign';\n\nlet AppDispatcher = assign(new Dispatcher(), {\n handleViewAction(action) {\n this.dispatch({\n source: 'VIEW_ACTION',\n action: action,\n });\n },\n});\n\nexport default AppDispatcher;\n","import React, { useEffect } from 'react';\nimport {\n Button,\n Dialog,\n HeadingText,\n BodyText,\n Link,\n} from '@paypalcorp/pp-react';\nimport Illustration from '../illustrations/Illustration';\nimport PropTypes from 'prop-types';\nimport { trackEventWithData } from '../../utilsV3/analytics';\n\nconst BasicModal = ({\n buttonLabel,\n buttonOnClick,\n buttonState,\n children,\n className,\n closeOnBackgroundClick,\n fptiSpec = {},\n header,\n linkLabel,\n linkOnClick,\n iconType,\n id,\n isOpen,\n message1,\n message2,\n onClose,\n}) => {\n useEffect(() => {\n if (isOpen) {\n trackEventWithData(fptiSpec.impression, fptiSpec.data);\n }\n }, [isOpen, id]);\n\n return (\n \n \n \n {header}\n \n \n }\n closeOnBackgroundClick={closeOnBackgroundClick}\n >\n {children}\n\n {message1 && {message1}}\n {message2 && {message2}}\n\n {buttonLabel && (\n \n {buttonLabel}\n \n )}\n\n {linkLabel && (\n \n {linkLabel}\n \n )}\n \n );\n};\n\nBasicModal.propTypes = {\n buttonLabel: PropTypes.string,\n buttonOnClick: PropTypes.func,\n buttonState: PropTypes.string,\n children: PropTypes.any,\n className: PropTypes.string,\n closeOnBackgroundClick: PropTypes.bool,\n fptiSpec: PropTypes.object,\n header: PropTypes.string,\n linkLabel: PropTypes.string,\n linkOnClick: PropTypes.func,\n iconType: PropTypes.string,\n id: PropTypes.string,\n isOpen: PropTypes.bool,\n message1: PropTypes.string,\n message2: PropTypes.string,\n onClose: PropTypes.func,\n};\n\nexport default BasicModal;\n","import { createHandler as initGriffin } from 'griffin-paypal/number';\nimport _get from 'lodash/get';\nimport _isEmpty from 'lodash/isEmpty';\n\nlet griffin;\nlet currencyMetadata;\nconst MAX_AMOUNT_LENGTH = 9;\n__initializeGriffin();\n\nfunction __initializeGriffin() {\n try {\n if (!currencyMetadata) {\n __getCurrencyMetadata();\n }\n if (currencyMetadata && !griffin) {\n griffin = initGriffin(currencyMetadata);\n }\n } catch (err) {\n console.log(err);\n }\n}\n\nexport function getGriffin() {\n return griffin;\n}\n\nfunction __getCurrencyMetadata() {\n const serverProps = document.getElementById('server-props');\n const serverPropsData = (serverProps && serverProps.innerHTML) || '{}';\n try {\n currencyMetadata = _get(JSON.parse(serverPropsData), 'currencyMetadata');\n } catch (err) {\n console.warn(err);\n }\n}\n\nfunction _getAmountValue(currencyParts) {\n var amount =\n currencyParts && currencyParts.find((item) => item.type === 'value');\n return amount && amount.value;\n}\n\nexport function formatAmount(value, currency) {\n value = value.replace(/[^0-9]/g, '') || 0;\n value = parseInt(value, 10).toString();\n\n if (value.length === 1) {\n value = `00${value}`;\n } else if (value.length === 2) {\n value = `0${value}`;\n } else if (value.length > MAX_AMOUNT_LENGTH) {\n value = value.substr(0, MAX_AMOUNT_LENGTH);\n }\n\n const digits = _get(griffin, `metadata.currencyInfo[${currency}].digits`);\n const negativeDigits = `-${digits}`;\n\n // Some currencies (eg: JPY) do not have decimal points\n if (digits > 0) {\n value = `${value.slice(0, negativeDigits)}.${value.slice(negativeDigits)}`;\n }\n\n return formatCurrency({ value, currency });\n}\n\nexport function formatAmountFromServer(value, currency) {\n const digits = _get(griffin, `metadata.currencyInfo[${currency}].digits`);\n const negativeDigits = `-${digits}`;\n const hasDecimalSeparator = value.indexOf('.') > 0;\n\n if (value.indexOf('.') < 0) {\n if (digits === 2) {\n value = `${value}.00`;\n }\n if (digits === 1) {\n value = `${value}.0`;\n }\n } else {\n const digitsAfterDecimalPoint = value.split('.')[1].length;\n if (digitsAfterDecimalPoint === 1 && digits === 2) {\n value = `${value}0`;\n }\n }\n\n value = value.replace(/[^0-9]/g, '') || 0;\n value = parseInt(value, 10).toString();\n\n if (value.length === 1) {\n value = `00${value}`;\n } else if (value.length === 2) {\n value = `0${value}`;\n } else if (value.length > MAX_AMOUNT_LENGTH) {\n value = value.substr(0, MAX_AMOUNT_LENGTH);\n }\n\n // Some currencies (eg: JPY) do not have decimal points\n if (digits > 0) {\n value = `${value.slice(0, negativeDigits)}.${value.slice(negativeDigits)}`;\n } else if (hasDecimalSeparator) {\n value = value.slice(0, value.length - 2);\n }\n\n return formatCurrency({ value, currency });\n}\n\nfunction formatCurrency(params) {\n if (!params.value || !params.currency) {\n return '';\n }\n\n if (!currencyMetadata) {\n return params.value;\n }\n\n let response = griffin.formatCurrency(\n {\n value: params.value,\n currency: params.currency,\n },\n griffin.CURRENCY_FORMAT.parts()\n );\n\n return _getAmountValue(response);\n}\n\nexport function normalizeNumber(amount) {\n if (!amount) {\n return '';\n }\n\n return griffin.normalizeNumber(amount);\n}\n\nexport function formatCurrencyAsISOFormat(params) {\n return griffin.formatCurrency(\n params,\n griffin.CURRENCY_FORMAT_SYMBOLISOCURRENCY\n );\n}\n\nexport function formatCurrencyNoDecimals(params, format) {\n if (!params.value) {\n return '';\n }\n\n var options = format ? format : griffin.CURRENCY_FORMAT_SYMBOLISOCURRENCY;\n options.maximumFractionDigits = 0;\n\n let formattedCurrency = griffin?.formatCurrency(params, options);\n\n return formattedCurrency;\n}\n\nexport function displayCurrency(amount, currency, { noDecimals = false } = {}) {\n const formattedAmount = griffin.formatCurrency({ currency, value: amount });\n const digits = _get(griffin, `metadata.currencyInfo[${currency}].digits`);\n const negativeDigits = `-${digits}`;\n\n if (\n amount !== 0 &&\n noDecimals &&\n formattedAmount.slice(negativeDigits) === '00'\n ) {\n const currencyParams = {\n currency: currency,\n value: parseFloat(amount),\n };\n\n return formatCurrencyNoDecimals(currencyParams, griffin.CURRENCY_FORMAT);\n }\n\n return formattedAmount;\n}\n\nexport function displayPercentage(amount) {\n return griffin.formatNumber(amount, { style: 'percent' });\n}\n\nexport function formatNumberDecimals(value) {\n if (!value) {\n return '';\n }\n\n var options = griffin.NUMBER_FORMAT;\n options.maximumFractionDigits = 2;\n\n return griffin.formatNumber(value, options);\n}\n\nexport function getCurrencyParts(amount, currencyCode) {\n return griffin.formatCurrency(\n {\n currency: currencyCode,\n value: amount,\n },\n griffin.CURRENCY_FORMAT_SYMBOLISOCURRENCY.parts()\n );\n}\n\nexport function getCurrencyPartByType(currencyParts, type) {\n const currencyPart =\n currencyParts && currencyParts.find((item) => item.type === type);\n\n return currencyPart && currencyPart.value;\n}\n\nexport function formatAmountToOnlyNumbers(amount) {\n if (_isEmpty(amount)) {\n amount = '0';\n }\n\n return normalizeNumber(amount);\n}\n\nexport const MIN_INPUT_WIDTH = 91;\nexport const DEFAULT_INPUT_FONTSIZE = 44;\nconst DIGITS_TO_FONT_SIZE_MAPPING = {\n 8: 42,\n 9: 40,\n 10: 38,\n};\n\nexport function getFontSize(value, isMobile) {\n let digitCount = value.replace(/[\\.,]/g, '').length;\n\n if (digitCount < 8) {\n return DEFAULT_INPUT_FONTSIZE;\n }\n\n return DIGITS_TO_FONT_SIZE_MAPPING[`${digitCount}`] || 44;\n}\n\nexport function getInputWidth(field, text) {\n text = text || '0.00';\n\n // Get styles from the element\n const currentStyles = window.getComputedStyle(field) || {};\n let { fontWeight } = currentStyles;\n let fontSize = `${getFontSize(text)}px`;\n\n // Create a span element outside visible area\n const spanElem = document.createElement('span');\n spanElem.style.fontSize = fontSize;\n spanElem.style.fontFamily = 'PayPalSansBig-Regular';\n spanElem.style.fontWeight = fontWeight || '400';\n spanElem.style.position = 'fixed';\n spanElem.style.top = '-1000px';\n spanElem.style.left = '-1000px';\n spanElem.innerHTML = text;\n document.body.appendChild(spanElem);\n\n // Get width of the span and then remove it\n const width = spanElem.getBoundingClientRect().width + 2; // increase by 2px to fix a layout problem in Safari iOS browser.\n document.body.removeChild(spanElem);\n\n if (width < MIN_INPUT_WIDTH) {\n return MIN_INPUT_WIDTH;\n }\n return width;\n}\n","export const PAGE_SPEC = {\n LANDING_PAGE: {\n pgrp: 'main:donate:wps::landing',\n page: 'main:donate:wps::landing:web::',\n tmpl: 'main:donate:wps::landing',\n },\n GUEST_FORM: {\n pgrp: 'main:donate:wps:guest:guestform',\n page: 'main:donate:wps:guest:guestform:web::',\n tmpl: 'main:donate:wps:guest:guestform:web::',\n },\n GUEST_SUCCESS_PAGE: {\n pgrp: 'main:donate:wps:guest:success',\n page: 'main:donate:wps:guest:success:web::',\n tmpl: 'main:donate:wps:guest:success:web::',\n },\n GUEST_SIGNUP_SUCCESS_PAGE: {\n pgrp: 'main:donate:wps:guest:upgrade',\n page: 'main:donate:wps:guest:upgrade:web::',\n tmpl: 'main:donate:wps:guest:upgrade:web::',\n },\n GUEST_PENDING_PAGE: {\n pgrp: 'main:donate:wps:guest:pending',\n page: 'main:donate:wps:guest:pending:web::',\n tmpl: 'main:donate:wps:guest:pending:web::',\n },\n GUEST_FAILURE_PAGE: {\n url: '/donate/error/payment',\n pgrp: 'main:donate:wps:guest:failure',\n page: 'main:donate:wps:guest:failure:web::',\n tmpl: 'main:donate:wps:guest:failure:web::',\n },\n ONBOARDING_GUEST_FORM: {\n pgrp: 'main:donate:wps:signup:signupform',\n page: 'main:donate:wps:signup:signupform:web::',\n tmpl: 'main:donate:wps:signup:signupform:web::',\n },\n ONBOARDING_GUEST_SUCCESS_PAGE: {\n pgrp: 'main:donate:wps:signup:success',\n page: 'main:donate:wps:signup:success:web::',\n tmpl: 'main:donate:wps:signup:success:web::',\n },\n ONBOARDING_GUEST_PENDING_PAGE: {\n pgrp: 'main:donate:wps:signup:pending',\n page: 'main:donate:wps:signup:pending:web::',\n tmpl: 'main:donate:wps:signup:pending:web::',\n },\n MEMBER_SUCCESS_PAGE: {\n url: '/donate/member/confirmation',\n pgrp: 'main:donate:wps:member:success',\n page: 'main:donate:wps:member:success:web::',\n tmpl: 'main:donate:wps:member:success:web::',\n },\n MEMBER_PENDING_PAGE: {\n url: '/donate/member/pending',\n pgrp: 'main:donate:wps:member:pending',\n page: 'main:donate:wps:member:pending:web::',\n tmpl: 'main:donate:wps:member:pending:web::',\n },\n MEMBER_FAILURE_PAGE: {\n url: '/donate/member/error',\n pgrp: 'main:donate:wps:member:failure',\n page: 'main:donate:wps:member:failure:web::',\n tmpl: 'main:donate:wps:member:failure:web::',\n },\n RECURRING_SUCCESS_PAGE: {\n url: '/donate/member/confirmation-rec',\n pgrp: 'main:donate:wps:member:success',\n page: 'main:donate:wps:member:success:web::',\n tmpl: 'main:donate:wps:member:success:web::',\n },\n MEMBER_REVIEW_PAGE: {\n url: '/donate/member',\n pgrp: 'main:donate:wps:member:review',\n page: 'main:donate:wps:member:review:web::',\n tmpl: 'main:donate:wps:member:review:web::',\n },\n CROSS_BORDER_PAGE: {\n url: '/donate/guest/crossborder',\n pgrp: 'main:donate:wps:guest:crossborder',\n page: 'main:donate:wps:guest:crossborder:web::',\n tmpl: 'main:donate:wps:guest:crossborder:web::',\n },\n THREE_DS_IFRAME: {\n pgrp: 'main:donate:wps:guest:3DS-challenge',\n page: 'main:donate:wps:guest:3DS-challenge:::',\n tmpl: 'main:donate:wps:guest:3DS-challenge:::',\n },\n THREE_DS_IFRAME_ONBRD: {\n pgrp: 'main:onbrd:signup:donate:3DS-challenge',\n page: 'main:onbrd:signup:donate:3DS-challenge:::',\n tmpl: 'main:onbrd:signup:donate:3DS-challenge:::',\n },\n UNILATERAL_ERROR_PAGE: {\n pgrp: 'main:donate:wps:guest:unilateral',\n page: 'main:donate:wps:guest:unilateral:web::',\n tmpl: 'main:donate:wps:guest:unilateral:web::',\n },\n CAPTURE_ORDER_PAGE: {\n pgrp: 'main:donate:wps:{flow}:captureOrder',\n page: 'main:donate:wps:{flow}:captureOrder:web::',\n tmpl: 'main:donate:wps:{flow}:captureOrder:web::',\n },\n WEBSCR_ERROR_PAGE: {\n pgrp: 'main:donate:wps::error',\n page: 'main:donate:wps::error:web::',\n tmpl: 'main:donate:wps::error:web::',\n },\n GENERIC_ERROR_PAGE: {\n pgrp: 'main:donate:wps:generic:failure',\n page: 'main:donate:wps:generic:failure:web::',\n tmpl: 'main:donate:wps:generic:failure:web::',\n },\n CRS_ERROR_PAGE: {\n pgrp: 'main:donate:wps:crs:failure',\n page: 'main:donate:wps:crs:failure:web::',\n tmpl: 'main:donate:wps:crs:failure:web::',\n },\n};\n\nexport const CPL_PAGE_SPEC = {\n LANDING_PAGE: {\n pgrp: 'main:donate:wps::landing:landingPageComponent',\n page: 'main:donate:wps::landing:landingPageComponent:web::',\n action: 'landing_page_loaded',\n uicomp: 'landingPageComponent',\n uitype: 'page',\n },\n GUEST_FORM: {\n pgrp: 'main:donate:wps:guest:guestform:guestFormComponent',\n page: 'main:donate:wps:guest:guestform:guestFormComponent:web:',\n action: 'guest_form_loaded',\n uicomp: 'guestForm',\n },\n TESLA_GUEST_FORM: {\n pgrp: 'main:onbrd:signup:donate:guestFormComponent',\n page: 'main:onbrd:signup:donate:guestFormComponent:web:',\n action: 'tesla_form_loaded',\n uicomp: 'teslaForm',\n },\n};\n\nexport const LINK_NAME = {\n ACCOUNT_HOME: 'myAccount',\n ANONYMOUS_CHECKBOX: 'anonymous_checkbox',\n ANONYMOUS_TOOLTIP: 'anonymousTooltip',\n BACK: 'back',\n CANCEL: 'cancel',\n CHANGE_COUNTRY: 'changeCountry',\n COVER_FEE_CHECKBOX: 'cover_fee_checkbox',\n CURRENCY_CONVERSION: 'showCurrencyConversionModal',\n DONE: 'done',\n GUEST_FORM_PAYMENT_SUBMIT_BUTTON: 'donate',\n NOT_YOU: 'not-you',\n NOTE_PAD: 'note_pad',\n ONBOARDING_FORM_PAYMENT_SUBMIT_BUTTON: 'guestPaymentBtn',\n PRESET_AMOUNT: 'presetAmount',\n PROGRAM_SELECTED: 'campaignSelected',\n RECURRING_CHECKBOX: 'recurringChkBx',\n REPORT_LINK: 'reportInappropriateContent',\n RETURN: 'return_to_merchant',\n SOCIAL_SHARE: 'social_share',\n SOCIAL_SHARE_DISMISS: 'close_social_share',\n UNIFIED_LOGIN: 'requestUnifiedLogin',\n VOUCHER: 'voucher',\n VOUCHER_PRINT: 'voucherprint',\n VOUCHER_SHARE: 'vouchershare',\n};\n\nexport const FPTI_TAGS = {\n ACCOUNT_TYPE: 'account_type',\n AMOUNT: 'amount',\n AMOUNT_EDIT_ALLOWED: 'allow_amount_edit',\n AUTH_STATE: 'authState',\n CAMPAIGN: 'campaign',\n CAMPAIGN_ID: 'campaign_id',\n CHALLENGE_END_TIME: 'challenge_end_time',\n CHALLENGE_START_TIME: 'challenge_start_time',\n CHALLENGE_STATUS: 'challenge_status', // for 3ds\n CHARITY_NAME: 'charityname',\n CHECKBOX: 'checkbox',\n COUNTRY: 'country',\n CURRENCY: 'currency',\n DONOR_IP_COUNTRY: 'acct_cntry',\n EVENT_NAME: 'event_name',\n ECCD: 'eccd', // error code\n ERPG: 'erpg', // error message\n ERR_CODE: 'error_code',\n ERR_DESC: 'error_desc',\n ERR_FIELD: 'erfd',\n EXPERIMENT_ID: 'xe',\n FEE_AMOUNT: 'fee_amt',\n FEE_CURRENCY: 'fee_curr',\n FEE_PAYER: 'fee_payer',\n FI_NETWORK: 'sel_fmx_tp', // payment card network\n FI_ID: 'fi_id',\n FI_OPERATION: 'fi_operation',\n FI_TYPE: 'fi_type', // payment card type\n FLOW: 'flow',\n LINK: 'link',\n NONANONYMOUS: 'nonanonymous',\n NPID: 'crid', // non-profit ID\n NOTE_ALLOWED: 'is_allow_note',\n NOTE_ADDED: 'has_note',\n INTEGRATION_IDENTIFIER: 'integration_identifier',\n IS_SIGNUP: 'user_opts_signup',\n IS_3DS_ELIGIBLE: 'is_3ds_eligible',\n ORDER_ID: 'order_id',\n OFFER_TYPE: 'offer_type',\n PAGE_LINK: 'pgln',\n PAGE_NAME: 'page',\n PAGE_GROUP: 'pgrp',\n PAGE_GROUP_LINK: 'pglk',\n PRODUCT: 'product',\n RECURRING: 'is_recurring',\n RESP_DURATION: 'resp_duration', // for 3ds\n SCREEN: 'screen',\n SELECTED_PRESET_BUTTON_ID: 'opsel',\n STATUS: 'status',\n STATUS_CODE: 'status_code',\n TOKEN: 'token',\n THREE_DS_DCC_START_TIME: 'dcc_start_time',\n THREE_DS_DCC_END_TIME: 'dcc_end_time',\n THREE_DS_LOOKUP_END_TIME: 'lookup_end_time',\n THREE_DS_LOOKUP_START_TIME: 'lookup_start_time',\n THREE_DS_REF_ID: '3ds_ref_id',\n THREE_DS_RESP_DURATION: 'resp_duration',\n THREE_DS_SPINNER_START_TIME: 'spinner_start_time',\n THREE_DS_SPINNER_END_TIME: 'spinner_end_time',\n THREE_DS_VERSION: '3ds_version',\n TREATMENT_ID: 'xt',\n TXN_ID: 'trid',\n UI_TYPE: 'ui_type', // full_page/popup/popup_blocked\n UOB_BUNDLE_TYPE: 'onboardingBundleType',\n};\n","export function showActionableErrorModal(errMsg) {\n window.showActionableErrorModal();\n document.getElementById('actionable-error-msg-1').innerHTML = errMsg;\n}\n\nexport function hideActionableErroModal() {\n window.hideActionableErroModal();\n}\n\nexport function showUnactionableErrorModal() {\n window.showUnactionableErrorModal();\n}\n\nexport function hideUnactionableErrorModal() {\n window.hideUnactionableErrorModal();\n}\n\nexport function showLeaveModal() {\n window.showLeaveModal();\n}\n\nexport function hideLeaveModal() {\n window.hideLeaveModal();\n}\n","import { createBrowserHistory } from 'history';\nimport * as modalUtils from '../buttons/utils/modalUtils';\n\nfunction waitForElement(selector, callback) {\n if (document.querySelector(selector) !== null) {\n callback(); // eslint-disable-line\n } else {\n setTimeout(function () {\n waitForElement(selector, callback);\n }, 100);\n }\n}\n\nconst history = createBrowserHistory({\n getUserConfirmation(message, callback) {\n // Show some custom dialog to the user and call\n // callback(true) to continue the transiton, or\n // callback(false) to abort it.\n modalUtils.showLeaveModal();\n\n waitForElement('#stay-and-finish', () => {\n document\n .querySelector('#stay-and-finish')\n .addEventListener('click', function () {\n console.log('stay-and-finish clicked');\n modalUtils.hideLeaveModal();\n callback(false); // eslint-disable-line\n });\n\n document\n .querySelector('#leave-now')\n .addEventListener('click', function () {\n modalUtils.hideLeaveModal();\n callback(true); // eslint-disable-line\n });\n });\n },\n});\nconst location = history.location;\n\nhistory.block((targetLocation, action) => {\n // The location and action arguments indicate the location\n // we're transitioning to and how we're getting there.\n if (\n window.location.pathname === '/donate/buttons/unhosted' &&\n targetLocation.pathname !== '/donate/buttons/unhosted/edit' &&\n targetLocation.pathname !== '/donate/buttons/login'\n ) {\n return \"If you leave now, your work won't be saved and you'll need to start over to create your button.\";\n }\n});\n\nexport { history, location };\n\nexport default history;\n","import React, { Component } from 'react';\nimport { LoadingSpinner } from '@paypalcorp/pp-react-loading-spinner';\n\nclass Spinner extends Component {\n render() {\n return ;\n }\n}\n\nexport default Spinner;\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\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","// eslint-disable-next-line no-unused-vars\nimport React, { useEffect } from 'react';\nimport { showSpinnerOverlay } from '../../utility/helper';\n\nexport default function FallbackSpinner() {\n useEffect(() => {\n showSpinnerOverlay();\n }, []);\n\n return <>;\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Radio } from '@paypalcorp/pp-react-radio';\nimport { Badge } from '@paypalcorp/pp-react-badge';\nimport { css, StyleSheet } from 'aphrodite';\nimport { shouldShowBadge } from '../../utilsV3/badgeUtils';\n\nconst styles = StyleSheet.create({\n customMargin: {\n marginTop: '4px',\n '@media (max-width: 576px)': {\n marginTop: '12px',\n ':nth-child(1n) > label': {\n display: 'inline-flex',\n },\n },\n },\n});\n\nclass BasicRadioField extends Component {\n static propTypes = {\n input: PropTypes.object,\n label: PropTypes.string,\n labelClassName: PropTypes.string,\n meta: PropTypes.object,\n id: PropTypes.string,\n dataTestId: PropTypes.string,\n checkedValue: PropTypes.string,\n tooltipContent: PropTypes.string,\n tooltipId: PropTypes.string,\n customTooltipClass: PropTypes.string,\n className: PropTypes.string,\n helperText: PropTypes.string,\n topLabel: PropTypes.bool,\n showBadge: PropTypes.bool,\n };\n\n render() {\n const { input, label, id, dataTestId, className, showBadge } = this.props;\n const badgeContent = shouldShowBadge(showBadge);\n\n return (\n \n {badgeContent}\n \n )\n }\n labelClassName={this.props.labelClassName || ''}\n className={`${className} ${\n this.props.tooltipContent && `${css(styles.customMargin)}`\n }`}\n id={id}\n data-testid={dataTestId}\n checked={this.props.checkedValue === input.value}\n centeredLabel={this.props.topLabel ? false : true}\n helperText={this.props.helperText ?? ''}\n {...input}\n />\n );\n }\n}\nexport default BasicRadioField;\n","import React, { Component } from 'react';\nimport _map from 'lodash/map';\nimport PropTypes from 'prop-types';\nimport { DropdownMenu, Tooltip } from '@paypalcorp/pp-react';\n\nclass BasicSelectField extends Component {\n static propTypes = {\n input: PropTypes.object,\n label: PropTypes.string,\n meta: PropTypes.object,\n id: PropTypes.string,\n options: PropTypes.array,\n tooltipContent: PropTypes.string,\n tooltipId: PropTypes.string,\n className: PropTypes.string,\n menuContainerClassName: PropTypes.string,\n helperText: PropTypes.string,\n };\n\n state = {\n selectedProgramIdx: this.props.options.findIndex(\n (option) => option.value === this.props.input.value\n ),\n };\n\n handleChange = (index) => {\n this.setState({\n selectedProgramIdx: index,\n });\n const value = this.props.options[index].value;\n this.props.input.onChange(value);\n };\n\n render() {\n const {\n label,\n meta: { touched, error },\n id,\n className,\n menuContainerClassName = '',\n } = this.props;\n\n const hasError = touched && error;\n\n const options = _map(this.props.options, (option) => {\n return {\n primaryText: option.displayValue,\n };\n });\n\n return (\n
\n \n {this.props.tooltipContent && (\n \n )}\n
\n );\n }\n}\n\nexport default BasicSelectField;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Checkbox } from '@paypalcorp/pp-react-checkbox';\n\nclass CheckboxField extends Component {\n static propTypes = {\n input: PropTypes.object,\n label: PropTypes.string,\n meta: PropTypes.object,\n id: PropTypes.string,\n disabled: PropTypes.bool,\n };\n\n render() {\n const { input, label, id } = this.props;\n\n const isDisabled = !!this.props.disabled;\n\n return (\n \n );\n }\n}\nexport default CheckboxField;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDropzone } from 'react-dropzone';\nimport { UploadIcon } from '@paypalcorp/pp-react-icons';\nimport { ALLOWED_IMAGE_TYPES, MAX_IMAGE_SIZE } from '../../utility/constants';\nimport getLocaleMessages from '../../buttons/utils/localesMessages';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport { trackEventWithData } from '../../buttons/utilsV3/analytics';\nimport { AddImageIcon, EditIcon } from '@paypalcorp/pp-react-icons';\nimport { Alert } from '@paypalcorp/pp-react-alert';\nimport _get from 'lodash/get';\nimport { getImageSize } from '../../buttons/utils/commonUtils';\n\nconst messages = getLocaleMessages('buttonsV3/dropZone');\nconst errors = getLocaleMessages('buttonsV3/fieldErrors');\n\nconst DropZoneComponent = ({\n fptiSpec,\n imgURL,\n onChange,\n imgWidth,\n showPreviewInDropzone,\n displayEditIcon,\n setDefaultHeight,\n showSolidBorder,\n}) => {\n const [imageSrc, setImageSrc] = useState('');\n const [dropzoneError, setDropzoneError] = useState('');\n\n const resizeImage = (original, imgName, fileSize) => {\n const img = new Image();\n img.src = original;\n img.crossOrigin = 'Anonymous';\n img.onload = (el) => {\n let imgObj = el.target;\n let elem = document.createElement('canvas');\n elem.width = imgWidth;\n elem.height = (imgWidth * imgObj.height) / imgObj.width;\n\n let ctx = elem.getContext('2d');\n ctx.drawImage(el.target, 0, 0, elem.width, elem.height);\n const srcEncoded = ctx.canvas.toDataURL(el.target, 'image/jpeg', 0);\n setImageSrc(srcEncoded);\n\n const size = getImageSize(fileSize, messages);\n\n const image = {\n src: srcEncoded,\n name: messages.name\n ? messages.name\n .replace('{name}', imgName)\n .replace('{size}', size.size)\n .replace('{type}', size.type)\n : imgName,\n };\n\n onChange(image);\n };\n };\n\n const { getRootProps, getInputProps } = useDropzone({\n maxFiles: 1,\n accept: ALLOWED_IMAGE_TYPES,\n maxSize: MAX_IMAGE_SIZE,\n onDrop: useCallback((acceptedFiles) => {\n setDropzoneError('');\n acceptedFiles.map((file) => {\n const reader = new FileReader();\n reader.onload = () => {\n const binaryStr = reader.result;\n resizeImage(binaryStr, file.name, file.size);\n };\n reader.readAsDataURL(file);\n\n trackEventWithData(fptiSpec.updated, {\n file_format: file?.type,\n });\n });\n }, []),\n onDropRejected: (rejections) => {\n try {\n const errorCode = _get(rejections[0], 'errors[0].code', 'default');\n switch (errorCode) {\n case 'file-too-large':\n onChange({ hasError: true, error: errors.dropzone.maxSize });\n break;\n case 'file-invalid-type':\n onChange({ hasError: true, error: errors.dropzone.notSupported });\n break;\n default:\n onChange({ hasError: true, error: errors.dropzone.tryAgain });\n break;\n }\n } catch (e) {\n onChange({ hasError: true, error: errors.dropzone.tryAgain });\n }\n },\n });\n\n useEffect(() => {\n setImageSrc(imgURL);\n }, [imgURL]);\n\n const trackClickEvent = () => {\n trackEventWithData(fptiSpec.change);\n };\n\n return (\n
\n \n {imageSrc && showPreviewInDropzone ? (\n \n ) : (\n <>\n \n \n {messages.label} \n \n )}\n \n\n {imageSrc && showPreviewInDropzone ? (\n
\n \n \n {displayEditIcon ? messages.editButton : messages.changeLogo}\n \n
\n ) : (\n

{messages.imgType}

\n )}\n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n
\n );\n};\n\nDropZoneComponent.propTypes = {\n fptiSpec: PropTypes.object,\n imgURL: PropTypes.string,\n onChange: PropTypes.func,\n imgWidth: PropTypes.number,\n displayEditIcon: PropTypes.bool,\n showPreviewInDropzone: PropTypes.bool,\n setDefaultHeight: PropTypes.bool,\n showSolidBorder: PropTypes.bool,\n};\n\nexport default DropZoneComponent;\n","// External Imports\nimport React from 'react';\nimport { Field, change } from 'redux-form';\nimport PropTypes from 'prop-types';\n\n// PPUI Imports\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport { Alert } from '@paypalcorp/pp-react-alert';\n\n// Internal Imports\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { BTN_FACTORY_V3_FORM } from '../../../clientConstants';\nimport BasicRadioField from '../../fields/BasicRadioField';\nimport BasicSelectField from '../../fields/BasicSelectField';\nimport CheckboxField from '../../fields/CheckboxField';\nimport { IMG_SCALE_SIZE } from '../../../../utility/constants';\nimport DropZoneComponent from '../../../../components/common/DropZone';\nimport { trackEventWithData } from '../../../utilsV3/analytics';\nimport { FPTI_SPEC, SCREEN } from '../../../utilsV3/fptiConstants';\nimport { shouldUsePayPalButtonStyle } from '../../../lib/buttonModelV3';\n\nconst {\n radio: { paypalButtonStyle, ownButtonStyle, largeValue, smallValue },\n buttonSize: { label },\n country: countryProperty,\n language: languageProperty,\n selectionLabel,\n cardLogoCheckbox,\n} = getLocaleMessages('buttonsV3/buttonStyles');\n\nconst renderRadioField = (props) => {\n return ;\n};\n\nconst renderButtonStyleDropdown = (props) => {\n return (\n \n );\n};\n\nconst renderLanguageDropdown = (props) => {\n return ;\n};\n\nconst renderCountryDropdown = (props) => {\n return ;\n};\n\nconst renderCheckboxField = (props) => {\n return ;\n};\n\nconst ButtonStyles = ({\n formValues,\n setImageUpdated,\n dispatch,\n optionsForCountry,\n optionsForLanguage,\n dropzoneError,\n setDropzoneError,\n showBadge,\n}) => {\n const getValue = (key) => {\n return formValues ? formValues[key] : null;\n };\n\n const buttonSize = getValue('buttonSize');\n const usePaypalButtonStyle = getValue('usePaypalButtonStyle');\n const isPayPalImage = shouldUsePayPalButtonStyle({\n button_image_url: getValue('buttonImageUrl'),\n });\n const buttonImageUrl =\n isPayPalImage === 'yes' ? '' : getValue('buttonImageUrl');\n\n const handleImageDropzone = (image) => {\n setDropzoneError('');\n if (image.hasError) {\n setDropzoneError(image.error);\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'BUTTON_IMAGE_DROPZONE_ERROR',\n error_desc: 'button_image',\n error_detail: image.error,\n screen: SCREEN.CONFIGURE_BUTTON,\n });\n } else {\n dispatch(change(BTN_FACTORY_V3_FORM, 'buttonImageUrl', image.src));\n setImageUpdated(true);\n }\n };\n\n const shouldDisableAcceptedCardLogos = () => {\n const size = getValue('buttonSize');\n return size === 'small';\n };\n\n return (\n
\n \n {selectionLabel}\n \n \n\n {usePaypalButtonStyle === 'yes' && (\n
\n \n\n \n\n \n\n {buttonSize !== 'small' && (\n
\n \n
\n )}\n
\n )}\n\n \n\n {usePaypalButtonStyle === 'no' && (\n
\n \n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n
\n )}\n
\n );\n};\n\nButtonStyles.propTypes = {\n setImageUpdated: PropTypes.func,\n optionsForCountry: PropTypes.array,\n optionsForLanguage: PropTypes.array,\n dispatch: PropTypes.func,\n formValues: PropTypes.object,\n dropzoneError: PropTypes.string,\n setDropzoneError: PropTypes.func,\n showBadge: PropTypes.bool,\n};\n\nexport default ButtonStyles;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { HeadingText, BodyText } from '@paypalcorp/pp-react-text';\n\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { isDonateButton } from '../../../utils/buttonFactoryUtils';\n\nconst { button, link } = getLocaleMessages('buttonsV3/stepHeader');\n\nconst StepHeader = ({ currentStep }) => {\n const stepHeaders = isDonateButton()\n ? button?.[currentStep]\n : link?.[currentStep];\n\n return stepHeaders ? (\n
\n {stepHeaders.header}\n {stepHeaders.subheader}\n
\n ) : null;\n};\n\nStepHeader.propTypes = {\n currentStep: PropTypes.number,\n};\n\nconst mapStateToProps = (state) => {\n const { buttonFactoryV3: { currentStep } = {} } = state;\n\n return {\n currentStep,\n };\n};\n\nexport default connect(mapStateToProps)(StepHeader);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { TextInput } from '@paypalcorp/pp-react';\nimport { getUserType } from '../../../utils/buttonFactoryUtils';\n\nconst {\n orgName: { label: orgLabel },\n displayName: { label: displayNameLabel },\n} = getLocaleMessages('buttonsV3/receiver');\nconst isBusinessAccount = getUserType() === 'BUSINESS';\n\nconst renderOrgNameTextField = (props) => {\n return ;\n};\n\nfunction OrganizationName() {\n return (\n \n );\n}\n\nrenderOrgNameTextField.propTypes = {\n input: PropTypes.object,\n};\n\nexport default OrganizationName;\n","import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { TextArea, ContextualAlert } from '@paypalcorp/pp-react';\nimport templateData from '../../../utility/getTemplateData';\nimport { byteLength } from '../../utils/clientValidatorUtils';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst TextAreaWithByteCounter = (props) => {\n const initialByteCount = props.input.value\n ? byteLength(props.input.value)\n : 0;\n const [byteCount, setByteCount] = useState(initialByteCount);\n const textAreaEl = useRef(null);\n\n const directionality = templateData.contextLocalityDir;\n const maxByteLimit = props.maxByteLimit;\n const counterAriaLabel = props.counterLabel\n .replace('{byteCount}', byteCount)\n .replace('{maxByteCount}', maxByteLimit);\n const errorText = props.meta.error;\n\n const handleChange = (event) => {\n const value = event.target.value;\n const byteLengthOfValue = byteLength(value);\n setByteCount(byteLengthOfValue);\n props.input.onChange(event);\n };\n\n useEffect(() => {\n if (errorText) {\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'INPUT_FIELD_VALIDATION_ERROR',\n error_desc: props.id,\n error_detail: errorText,\n });\n }\n }, [errorText]);\n\n return (\n
\n \n \n textAreaEl.current.focus()}\n >\n {`${byteCount}/${maxByteLimit}`}\n
\n \n {errorText && (\n \n {errorText}\n \n )}\n \n );\n};\n\nTextAreaWithByteCounter.propTypes = {\n input: PropTypes.object,\n maxByteLimit: PropTypes.number,\n counterLabel: PropTypes.string,\n errorMsg: PropTypes.string,\n textLabel: PropTypes.string,\n id: PropTypes.string,\n meta: PropTypes.object,\n};\n\nexport default TextAreaWithByteCounter;\n","import React from 'react';\nimport { Field } from 'redux-form';\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react';\nimport TextAreaWithByteCounter from '../../fields/TextAreaWithByteCounter';\n\nconst MAX_BYTE_LIMIT = 127;\nconst {\n title,\n subTitle,\n text: { label },\n counter: { ariaLabel },\n} = getLocaleMessages('buttonsV3/purpose');\n\nconst renderPurposeTextArea = (props) => {\n return ;\n};\n\nfunction Purpose() {\n return (\n
\n \n {title}\n \n {subTitle}\n \n
\n );\n}\n\nexport default Purpose;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport DropZoneComponent from '../../../components/common/DropZone';\nimport { IMG_SCALE_SIZE } from '../../../utility/constants';\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport { Checkbox } from '@paypalcorp/pp-react-checkbox';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { change } from 'redux-form';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { IconButton } from '@paypalcorp/pp-react-icon-button';\nimport { TrashIcon } from '@paypalcorp/pp-react-icons';\nimport { Alert } from '@paypalcorp/pp-react-alert';\nimport _isEmpty from 'lodash/isEmpty';\nimport {\n LOGO_TARGET_BUTTON,\n LOGO_TARGET_NOLOGO,\n LOGO_TARGET_PROFILE,\n} from '../../reducers/reducerButtonFactoryV3';\n\nimport getLocaleMessages from '../../../buttons/utils/localesMessages';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC, SCREEN } from '../../utilsV3/fptiConstants';\nimport { getUserType } from '../../utils/buttonFactoryUtils';\nconst errors = getLocaleMessages('buttonsV3/fieldErrors');\n\nconst DropzoneLogo = ({\n dispatch,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n getContent,\n closeModal,\n logoUrl,\n setLogoImg,\n logoTarget,\n isLogoBusinessProfile,\n setIsLogoBusinessProfile,\n}) => {\n const logo = getContent('modal.logo');\n const checkbox = getContent('modal.checkbox', null, { useHTML: true });\n const checkboxHelpText = getContent('modal.checkboxHelpText');\n const saveButton = getContent('modal.saveButton');\n const deleteButton = getContent('modal.deleteButton');\n const userType = getUserType();\n\n const [imageData, setImageData] = useState();\n const [showSpinner, setShowSpinner] = useState(false);\n const [checkboxValue, setCheckboxValue] = useState(true);\n const [imageUpdated, setImageUpdated] = useState(false);\n const [dropzoneError, setDropzoneError] = useState('');\n const [showSaveButton, setShowSaveButton] = useState(false);\n\n const handleImageDropzone = (image) => {\n setDropzoneError('');\n if (image.hasError) {\n setDropzoneError(image.error);\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_DROPZONE_ERROR',\n error_desc: 'logo',\n error_detail: image.error,\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n } else {\n trackEventWithData(FPTI_SPEC.UPLOAD_LOGO_MODAL_IMAGE_UPDATED);\n setImageUpdated(true);\n setImageData(image);\n setIsLogoBusinessProfile(false);\n }\n };\n\n useEffect(() => {\n if (logoUrl) {\n setImageData({\n src: logoUrl,\n name: logoUrl.split('/').pop(),\n });\n }\n }, []);\n\n const handleImageUpload = async () => {\n return new Promise((resolve, reject) => {\n uploadImage(imageData.src)\n .then((response) => {\n if (response.ok) {\n return resolve(response);\n }\n\n let error = {\n processingStage: 'IMAGE_UPLOAD_ERROR',\n response,\n };\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'LOGO_IMAGE_UPLOAD_ERROR',\n error_desc: 'logo',\n error_detail: JSON.stringify(response),\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n return reject(error);\n })\n .catch((error) => {\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'LOGO_IMAGE_UPLOAD_ERROR',\n error_desc: 'logo',\n error_detail: JSON.stringify(error),\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n return reject({ ...error, processingStage: 'IMAGE_UPLOAD_ERROR' });\n });\n });\n };\n\n const handleBusinessProfileUpdate = async (url) => {\n return new Promise((resolve, reject) => {\n updateBusinessProfileLogo(url)\n .then((response) => {\n if (response.ok) {\n return resolve(response);\n }\n\n let error = {\n processingStage: 'BUSINESS_PROFILE_IMAGE_UPDATE_ERROR',\n response,\n };\n return reject(error);\n })\n .catch((error) => {\n return reject({\n ...error,\n processingStage: 'BUSINESS_PROFILE_IMAGE_UPDATE_ERROR',\n });\n });\n });\n };\n\n const updateLogo = (url) => {\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoUrl', url));\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoTarget', LOGO_TARGET_BUTTON));\n setLogoImg(url);\n setShowSpinner(false);\n setIsLogoBusinessProfile(false);\n closeModal();\n };\n\n const updateSettingsLogo = (url) => {\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoUrl', ''));\n dispatch(change(BTN_FACTORY_V3_FORM, 'businessProfileLogoUrl', url));\n updateBusinessImageUrls(url);\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoTarget', LOGO_TARGET_PROFILE));\n setIsLogoBusinessProfile(true);\n setLogoImg(url);\n setShowSpinner(false);\n closeModal();\n };\n\n const removeImage = () => {\n setImageData();\n setIsLogoBusinessProfile(true);\n setShowSaveButton(true);\n };\n\n const saveLogo = async () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_LOGO_MODAL_SAVE_CL);\n\n let src = imageData?.src ?? '';\n if (_isEmpty(src)) {\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoUrl', ''));\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoTarget', LOGO_TARGET_NOLOGO));\n closeModal();\n } else if (imageUpdated) {\n try {\n setShowSpinner(true);\n let response = await handleImageUpload();\n if (response.success) {\n // BUSINESS PROFILE LOGO UPDATE\n if (checkboxValue && userType === 'BUSINESS') {\n try {\n let businessProfileResponse = await handleBusinessProfileUpdate(\n response.src\n );\n if (businessProfileResponse.success) {\n updateSettingsLogo(response.src);\n } else {\n updateLogo(response.src);\n // TODO: Manage business profile error (Content is in progress)\n }\n } catch (e) {\n updateLogo(response.src);\n }\n } else {\n updateLogo(response.src);\n }\n } else {\n setShowSpinner(false);\n setDropzoneError(errors.dropzone.tryAgain);\n setLogoImg('');\n }\n } catch (e) {\n setShowSpinner(false);\n setDropzoneError(errors.dropzone.tryAgain);\n setLogoImg('');\n }\n } else {\n closeModal();\n }\n };\n\n return (\n
\n {imageData && (\n <>\n {logo}\n
\n \n {imageData.name}\n \n \n {deleteButton}\n \n
\n \n )}\n \n {imageUpdated ? (\n <>\n {!isLogoBusinessProfile && userType === 'BUSINESS' && (\n {\n trackEventWithData(FPTI_SPEC.UPLOAD_LOGO_MODAL_CHECKBOX_CL, {\n checked: !checkboxValue,\n });\n setCheckboxValue(!checkboxValue);\n }}\n className=\"business-checkbox\"\n name=\"updateBusinessProfile\"\n helperText={checkboxHelpText}\n />\n )}\n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n \n {saveButton}\n \n \n ) : (\n <>\n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n {showSaveButton && (\n \n {saveButton}\n \n )}\n \n )}\n
\n );\n};\n\nDropzoneLogo.propTypes = {\n dispatch: PropTypes.func,\n uploadImage: PropTypes.func,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n getContent: PropTypes.func,\n closeModal: PropTypes.func,\n logoUrl: PropTypes.string,\n setLogoImg: PropTypes.func,\n logoTarget: PropTypes.string,\n isLogoBusinessProfile: PropTypes.bool,\n setIsLogoBusinessProfile: PropTypes.func,\n};\n\nexport default DropzoneLogo;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Sheet } from '@paypalcorp/pp-react-sheet';\nimport { HeadingText } from '@paypalcorp/pp-react-text';\nimport DropzoneLogo from './DropzoneLogo';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst ImageModal = ({\n getContent,\n isOpen,\n handleCloseModal,\n dispatch,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n logoUrl,\n isLogoBusinessProfile,\n setLogoImg,\n logoTarget,\n setIsLogoBusinessProfile,\n}) => {\n const title = getContent('modal.title');\n\n useEffect(() => {\n if (isOpen) {\n trackEventWithData(FPTI_SPEC.UPLOAD_LOGO_MODAL_IM);\n }\n }, [isOpen]);\n\n const handleDismissClick = () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_LOGO_MODAL_DISMISS_CL);\n handleCloseModal();\n };\n\n return (\n \n \n {title}\n \n\n \n \n );\n};\n\nImageModal.propTypes = {\n getContent: PropTypes.func,\n isOpen: PropTypes.bool,\n handleCloseModal: PropTypes.func,\n dispatch: PropTypes.func,\n uploadImage: PropTypes.func,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n logoUrl: PropTypes.string,\n setLogoImg: PropTypes.func,\n logoTarget: PropTypes.string,\n isLogoBusinessProfile: PropTypes.bool,\n setIsLogoBusinessProfile: PropTypes.func,\n};\n\nexport default ImageModal;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { change, Field } from 'redux-form';\nimport getContent from 'pp-react-l10n';\nimport { renderSwitchComponent } from '../switchPanels/SwitchPanel';\nimport LogoModal from './LogoModal';\nimport _isEmpty from 'lodash/isEmpty';\nimport { EditIcon } from '@paypalcorp/pp-react-icons';\nimport { ContextualAlert } from '@paypalcorp/pp-react-contextual-alert';\nimport {\n LOGO_TARGET_BUTTON,\n LOGO_TARGET_NOLOGO,\n LOGO_TARGET_PROFILE,\n} from '../../reducers/reducerButtonFactoryV3';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst getImageBannerContent = getContent('locals')('buttonsV3/logoExperience');\nconst title = getImageBannerContent('switchTitle');\nconst button = getImageBannerContent('uploadButton');\nconst editButton = getImageBannerContent('editButton');\n\nconst LogoExperience = ({\n isChecked,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n logoUrl,\n logoTarget,\n businessProfileLogoUrl,\n dispatch,\n logoClientError,\n noLogoImage,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [logoImg, setLogoImg] = useState();\n const [isLogoBusinessProfile, setIsLogoBusinessProfile] = useState(false);\n\n useEffect(() => {\n // In case user has logo in business profile\n // once user toggle on the logo option\n // we should display their business profile logo\n // and update logo target to be PROFILE\n if (\n noLogoImage === 'no' &&\n logoTarget === LOGO_TARGET_NOLOGO &&\n !_isEmpty(businessProfileLogoUrl)\n ) {\n dispatch(change(BTN_FACTORY_V3_FORM, 'logoTarget', LOGO_TARGET_PROFILE));\n setIsLogoBusinessProfile(true);\n }\n }, [noLogoImage]);\n\n useEffect(() => {\n switch (logoTarget) {\n case LOGO_TARGET_PROFILE:\n setLogoImg(businessProfileLogoUrl);\n break;\n case LOGO_TARGET_BUTTON:\n setLogoImg(logoUrl);\n break;\n case LOGO_TARGET_NOLOGO:\n default:\n setLogoImg('');\n break;\n }\n }, [logoTarget]);\n\n useEffect(() => {\n setIsLogoBusinessProfile(\n !_isEmpty(businessProfileLogoUrl) &&\n logoTarget === LOGO_TARGET_PROFILE &&\n logoImg === businessProfileLogoUrl\n );\n }, []);\n\n const logoImageContainer = () => {\n if (_isEmpty(logoImg)) {\n return (\n <>\n setIsOpen(true)}\n secondary\n >\n {button}\n \n {logoClientError && (\n {logoClientError}\n )}\n \n );\n }\n return (\n
\n \n {\n setIsOpen(true);\n trackEventWithData(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_UPLOAD_LOGO_CL);\n }}\n iconComponent={EditIcon}\n tertiary\n >\n {editButton}\n \n
\n );\n };\n\n return (\n
\n \n\n {isChecked && logoImageContainer()}\n\n setIsOpen(false)}\n uploadImage={uploadImage}\n updateBusinessProfileLogo={updateBusinessProfileLogo}\n updateBusinessImageUrls={updateBusinessImageUrls}\n logoUrl={logoImg}\n setLogoImg={setLogoImg}\n logoTarget={logoTarget}\n isLogoBusinessProfile={isLogoBusinessProfile}\n setIsLogoBusinessProfile={setIsLogoBusinessProfile}\n dispatch={dispatch}\n />\n
\n );\n};\n\nLogoExperience.propTypes = {\n isChecked: PropTypes.bool,\n uploadImage: PropTypes.func,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n logoUrl: PropTypes.string,\n logoTarget: PropTypes.string,\n businessProfileLogoUrl: PropTypes.string,\n dispatch: PropTypes.func,\n logoClientError: PropTypes.string,\n noLogoImage: PropTypes.string,\n};\n\nexport default LogoExperience;\n","import React, { useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport Cropper from 'react-easy-crop';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport { ChevronCircleUpIcon, EditIcon } from '@paypalcorp/pp-react-icons';\nimport { change } from 'redux-form';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { useDropzone } from 'react-dropzone';\nimport {\n ALLOWED_IMAGE_TYPES,\n MAX_IMAGE_SIZE,\n} from '../../../utility/constants';\nimport { Alert } from '@paypalcorp/pp-react-alert';\nimport _get from 'lodash/get';\nimport { grey300 } from '@paypalcorp/pp-react-colors';\n\nimport getLocaleMessages from '../../../buttons/utils/localesMessages';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC, SCREEN } from '../../utilsV3/fptiConstants';\nconst errors = getLocaleMessages('buttonsV3/fieldErrors');\n\nconst CropImage = ({\n imgUrl,\n getContent,\n uploadImage,\n closeModal,\n widthBanner,\n dispatch,\n isMobile,\n}) => {\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [cropAreaPixels, setCropAreaPixels] = useState(null);\n const [showSpinner, setShowSpinner] = useState(false);\n const [fade, setFade] = useState(true);\n const [urlSrc, setUrlSrc] = useState(imgUrl);\n\n const saveButtonImage = getContent('modal.saveButtonImage');\n const editButton = getContent('modal.editButton');\n const dragImage = getContent('modal.dragImage');\n const [dropzoneError, setDropzoneError] = useState('');\n\n const resizeImage = (original, imgName) => {\n const img = new Image();\n img.src = original;\n img.crossOrigin = 'Anonymous';\n img.onload = (el) => {\n let imgObj = el.target;\n let elem = document.createElement('canvas');\n elem.width = widthBanner;\n elem.height = (widthBanner * imgObj.height) / imgObj.width;\n\n let ctx = elem.getContext('2d');\n ctx.drawImage(el.target, 0, 0, elem.width, elem.height);\n const srcEncoded = ctx.canvas.toDataURL(el.target, 'image/jpeg', 0);\n setUrlSrc(srcEncoded);\n };\n };\n\n const { getRootProps, getInputProps } = useDropzone({\n maxFiles: 1,\n accept: ALLOWED_IMAGE_TYPES,\n maxSize: MAX_IMAGE_SIZE,\n onDrop: useCallback((acceptedFiles) => {\n setDropzoneError('');\n acceptedFiles.map((file) => {\n const reader = new FileReader();\n reader.onload = () => {\n const binaryStr = reader.result;\n resizeImage(binaryStr, file.name);\n };\n reader.readAsDataURL(file);\n });\n }, []),\n onDropRejected: (rejections) => {\n try {\n const errorCode = _get(rejections[0], 'errors[0].code', 'default');\n switch (errorCode) {\n case 'file-too-large':\n setDropzoneError(errors.dropzone.maxSize);\n break;\n case 'file-invalid-type':\n setDropzoneError(errors.dropzone.notSupported);\n break;\n default:\n setDropzoneError(errors.dropzone.tryAgain);\n break;\n }\n } catch (e) {\n setDropzoneError(errors.dropzone.tryAgain);\n }\n },\n });\n\n const createImage = () =>\n new Promise((resolve, reject) => {\n const image = new Image();\n image.addEventListener('load', () => resolve(image));\n image.addEventListener('error', (error) => reject(error));\n image.setAttribute('crossOrigin', 'anonymous');\n image.src = urlSrc;\n });\n\n const getCroppedImage = async () => {\n const image = await createImage();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const maxSize = Math.max(image.width, image.height);\n const safeArea = 2 * ((maxSize / 2) * Math.sqrt(2));\n\n canvas.width = safeArea;\n canvas.height = safeArea;\n\n ctx.translate(safeArea / 2, safeArea / 2);\n ctx.translate(-safeArea / 2, -safeArea / 2);\n\n // draw rotated image and store data.\n ctx.drawImage(\n image,\n safeArea / 2 - image.width * 0.5,\n safeArea / 2 - image.height * 0.5\n );\n const data = ctx.getImageData(0, 0, safeArea, safeArea);\n\n // set canvas width to final desired crop size - this will clear existing context\n canvas.width = cropAreaPixels.width;\n canvas.height = cropAreaPixels.height;\n\n // paste generated rotate image with correct offsets for x,y crop values.\n ctx.putImageData(\n data,\n Math.round(0 - safeArea / 2 + image.width * 0.5 - cropAreaPixels.x),\n Math.round(0 - safeArea / 2 + image.height * 0.5 - cropAreaPixels.y)\n );\n\n // As Base64 string\n return canvas.toDataURL('image/jpeg');\n };\n\n const handleImageUpload = async (url) => {\n return new Promise((resolve, reject) => {\n uploadImage(url)\n .then((response) => {\n if (response.ok) {\n return resolve(response);\n }\n\n let error = {\n processingStage: 'IMAGE_UPLOAD_ERROR',\n response,\n };\n return reject(error);\n })\n .catch((error) => {\n return reject({ ...error, processingStage: 'IMAGE_UPLOAD_ERROR' });\n });\n });\n };\n\n const saveCroppedImage = useCallback(async () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_BACKGOURND_IMG_MODAL_SAVE_CL);\n\n const img = await getCroppedImage();\n try {\n setShowSpinner(true);\n let response = await handleImageUpload(img);\n if (response.success) {\n setShowSpinner(false);\n dispatch(change(BTN_FACTORY_V3_FORM, 'bannerImageUrl', response.src));\n closeModal();\n } else {\n setShowSpinner(false);\n setDropzoneError(errors.dropzone.tryAgain);\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_UPLOAD_ERROR',\n error_desc: 'banner_image',\n error_detail: 'try again',\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n }\n } catch (e) {\n setShowSpinner(false);\n setDropzoneError(errors.dropzone.tryAgain);\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_UPLOAD_ERROR',\n error_desc: 'banner_image',\n error_detail: 'try again',\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n }\n });\n\n const onCropComplete = useCallback((croppedArea, croppedAreaPixels) => {\n setCropAreaPixels(croppedAreaPixels);\n }, []);\n\n const fadeOut = () => {\n setFade(false);\n };\n const fadeIn = () => {\n setFade(true);\n };\n\n return (\n <>\n \n \n {}\n {dragImage}\n \n\n \n \n
\n \n \n {editButton}\n \n
\n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n\n \n {saveButtonImage}\n \n \n );\n};\n\nCropImage.propTypes = {\n imgUrl: PropTypes.string,\n getContent: PropTypes.func,\n uploadImage: PropTypes.func,\n closeModal: PropTypes.func,\n dispatch: PropTypes.func,\n widthBanner: PropTypes.number,\n isMobile: PropTypes.bool,\n};\n\nexport default CropImage;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport DropZoneComponent from '../../../components/common/DropZone';\nimport { IMG_SCALE_SIZE } from '../../../utility/constants';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport CropImage from './CropImage';\nimport { IconButton } from '@paypalcorp/pp-react-icon-button';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { TrashIcon } from '@paypalcorp/pp-react-icons';\nimport { Alert } from '@paypalcorp/pp-react-alert';\nimport { change } from 'redux-form';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC, SCREEN } from '../../utilsV3/fptiConstants';\n\nconst DropzoneImageHandle = ({\n dispatch,\n uploadImage,\n getContent,\n closeModal,\n bannerImageUrl,\n isMobile,\n}) => {\n const imageHandle = getContent('modal.imageHandle');\n const saveButtonImage = getContent('modal.saveButtonImage');\n const deleteButton = getContent('modal.deleteButton');\n\n const [imageData, setImageData] = useState();\n const [dropzoneError, setDropzoneError] = useState('');\n\n useEffect(() => {\n if (bannerImageUrl) {\n setImageData({\n src: bannerImageUrl,\n name: bannerImageUrl.split('/').pop(),\n });\n }\n }, []);\n\n const handleImageDropzone = (image) => {\n setDropzoneError('');\n if (image.hasError) {\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_DROPZONE_ERROR',\n error_desc: 'banner_image',\n error_detail: image.error,\n screen: SCREEN.EXPERIENCE_SETUP,\n });\n setDropzoneError(image.error);\n } else {\n setImageData(image);\n trackEventWithData(FPTI_SPEC.UPLOAD_BACKGOURND_IMG_MODAL_IMAGE_UPDATED);\n }\n };\n\n const deleteImage = () => {\n dispatch(change(BTN_FACTORY_V3_FORM, 'bannerImageUrl', ''));\n closeModal();\n };\n\n const handleSaveButtonClick = () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_BACKGOURND_IMG_MODAL_SAVE_CL);\n deleteImage();\n };\n\n return (\n
\n {!imageData ? (\n <>\n \n {dropzoneError && (\n \n {dropzoneError}\n \n )}\n \n \n ) : (\n <>\n {imageHandle}\n
\n {imageData.name && (\n \n {imageData.name}\n \n )}\n setImageData()}\n svgIconComponent={TrashIcon}\n className={'delete-img'}\n >\n {deleteButton}\n \n
\n\n \n \n )}\n
\n );\n};\n\nDropzoneImageHandle.propTypes = {\n dispatch: PropTypes.func,\n uploadImage: PropTypes.func,\n getContent: PropTypes.func,\n closeModal: PropTypes.func,\n bannerImageUrl: PropTypes.string,\n isMobile: PropTypes.bool,\n};\n\nexport default DropzoneImageHandle;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Sheet } from '@paypalcorp/pp-react-sheet';\nimport { HeadingText, BodyText } from '@paypalcorp/pp-react-text';\nimport DropzoneImageHandle from './DropzoneImageHandle';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst ImageModal = ({\n getContent,\n isOpen,\n handleCloseModal,\n dispatch,\n uploadImage,\n bannerImageUrl,\n isMobile,\n}) => {\n const title = getContent('modal.title');\n const body = getContent('modal.body');\n const bullets = getContent('modal.bullet');\n\n useEffect(() => {\n if (isOpen) {\n trackEventWithData(FPTI_SPEC.UPLOAD_BACKGOURND_IMG_MODAL_IM);\n }\n }, [isOpen]);\n\n const handleDismissClick = () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_BACKGOURND_IMG_MODAL_DISMISS_CL);\n handleCloseModal();\n };\n\n return (\n \n \n {title}\n \n \n {body}\n
    \n
  • {bullets[0]}
  • \n
  • {bullets[1]}
  • \n
  • {bullets[2]}
  • \n
\n
\n \n \n );\n};\n\nImageModal.propTypes = {\n getContent: PropTypes.func,\n isOpen: PropTypes.bool,\n handleCloseModal: PropTypes.func,\n dispatch: PropTypes.func,\n uploadImage: PropTypes.func,\n bannerImageUrl: PropTypes.string,\n isMobile: PropTypes.bool,\n};\n\nexport default ImageModal;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { Field } from 'redux-form';\nimport getContent from 'pp-react-l10n';\nimport { renderSwitchComponent } from '../switchPanels/SwitchPanel';\nimport ImageModal from './ImageModal';\nimport _isEmpty from 'lodash/isEmpty';\nimport { EditIcon } from '@paypalcorp/pp-react-icons';\nimport { ContextualAlert } from '@paypalcorp/pp-react-contextual-alert';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\nimport { trackEventWithData } from '../../utilsV3/analytics';\n\nconst getImageBannerContent = getContent('locals')('buttonsV3/imageBanner');\nconst title = getImageBannerContent('switchTitle');\nconst button = getImageBannerContent('uploadButton');\nconst editButton = getImageBannerContent('editButton');\n\nconst BannerImage = ({\n isChecked,\n uploadImage,\n bannerImageUrl,\n bannerClientError,\n dispatch,\n isMobile,\n showBadge,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const handleUploadNewImage = () => {\n setIsOpen(true);\n trackEventWithData(\n FPTI_SPEC.EXPERIENCE_SETUP_PAGE_UPLOAD_BACKGOURND_IMG_CL\n );\n };\n\n const bannerImageContainer = () => {\n if (_isEmpty(bannerImageUrl)) {\n return (\n <>\n \n {button}\n \n {bannerClientError && (\n {bannerClientError}\n )}\n \n );\n }\n return (\n
\n \n \n {editButton}\n \n
\n );\n };\n\n return (\n
\n \n\n {isChecked && bannerImageContainer()}\n\n setIsOpen(false)}\n uploadImage={uploadImage}\n bannerImageUrl={bannerImageUrl}\n dispatch={dispatch}\n isMobile={isMobile}\n />\n
\n );\n};\n\nBannerImage.propTypes = {\n isChecked: PropTypes.bool,\n uploadImage: PropTypes.func,\n bannerImageUrl: PropTypes.string,\n bannerClientError: PropTypes.string,\n dispatch: PropTypes.func,\n isMobile: PropTypes.bool,\n showBadge: PropTypes.bool,\n};\n\nexport default BannerImage;\n","import React from 'react';\nimport { Row } from '@paypalcorp/pp-react-grid';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport getLocaleMessages from '../../utils/localesMessages';\n\nconst { cancelButton, back, continueButton, finishButton } =\n getLocaleMessages('buttonsV3/common');\n\nconst WizardNavButtons = ({\n steps: { currentStep, totalSteps },\n showSpinner = false,\n handleBack,\n handleSubmit,\n}) => {\n return (\n \n \n \n {currentStep === totalSteps ? finishButton : continueButton}\n \n \n );\n};\n\nWizardNavButtons.propTypes = {\n steps: PropTypes.object,\n showSpinner: PropTypes.bool,\n handleBack: PropTypes.func,\n handleSubmit: PropTypes.func,\n};\n\nconst mapStateToProps = (state) => {\n const { buttonFactoryV3: { currentStep, totalSteps } = {} } = state;\n\n return {\n steps: {\n currentStep,\n totalSteps,\n },\n };\n};\n\nexport default connect(mapStateToProps)(WizardNavButtons);\n","// External Imports\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { getFormValues, reduxForm } from 'redux-form';\nimport PropTypes from 'prop-types';\nimport _get from 'lodash/get';\n\n// PPUI Imports\nimport { Container } from '@paypalcorp/pp-react-grid';\nimport { Divider } from '@paypalcorp/pp-react-divider';\n\n// Internal Imports\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { validate } from '../../lib/clientValidatorV3';\nimport ButtonStyles from './ButtonStyles/ButtonStyles';\nimport StepHeader from './components/StepHeader';\nimport OrganizationName from './components/OrganizationName';\nimport Purpose from './components/Purpose';\nimport LogoExperience from '../logoExperience/LogoExperience';\nimport BannerImage from '../BannerImage/BannerImage';\nimport {\n isDonateButton,\n getOptionsForCountriesField,\n getOptionsForLanguageField,\n isHostedFlow,\n} from '../../utils/buttonFactoryUtils';\nimport WizardNavButtons from '../navigationButtons/WizardNavButtons';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst WizardStep1 = ({\n handleBack,\n handleSubmit,\n formValues,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n application,\n dispatch,\n optionsForCountry,\n optionsForLanguage,\n setImageUpdated,\n dropzoneError,\n setDropzoneError,\n logoClientError,\n bannerClientError,\n showSpinner,\n}) => {\n const trackPageLoadImpression = () => {\n if (isDonateButton()) {\n trackEventWithData(FPTI_SPEC.CONFIGURE_BUTTON_PAGE_IM);\n } else {\n trackEventWithData(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_IM, { step: 1 });\n }\n };\n\n useEffect(() => {\n trackPageLoadImpression();\n }, []);\n\n // On this step, formValues is undefined on the first render\n // Might be related to https://github.com/redux-form/redux-form/issues/3570\n if (!formValues) {\n return null;\n }\n\n return (\n <>\n \n \n\n
\n {isDonateButton() ? (\n \n ) : (\n <>\n \n {isHostedFlow() && (\n <>\n \n \n \n )}\n \n \n \n )}\n \n
\n \n \n );\n};\n\nWizardStep1.propTypes = {\n buttonFactoryV3: PropTypes.object,\n handleBack: PropTypes.func,\n handleSubmit: PropTypes.func,\n formValues: PropTypes.object,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n uploadImage: PropTypes.func,\n setShowSpinner: PropTypes.bool,\n application: PropTypes.object,\n dispatch: PropTypes.func,\n onSubmit: PropTypes.func,\n setImageUpdated: PropTypes.func,\n dropzoneError: PropTypes.string,\n setDropzoneError: PropTypes.func,\n logoClientError: PropTypes.string,\n bannerClientError: PropTypes.string,\n showSpinner: PropTypes.bool,\n};\n\nlet WizardStep1Form = reduxForm({\n form: BTN_FACTORY_V3_FORM,\n keepDirtyOnReinitialize: true,\n destroyOnUnmount: false,\n forceUnregisterOnUnmount: true,\n validate,\n})(WizardStep1);\n\nconst mapStateToProps = (state) => {\n const formValues = getFormValues(BTN_FACTORY_V3_FORM)(state);\n const { application = {}, buttonFactoryV3 = {} } = state;\n const countryAndLanguageDetails = _get(\n application,\n 'countryAndLanguageDetails'\n );\n const countryCode =\n _get(formValues, 'countryCode') ||\n _get(buttonFactoryV3, 'formattedButton.countryCode');\n\n return {\n formValues,\n application,\n initialValues: buttonFactoryV3.formattedButton,\n optionsForCountry: getOptionsForCountriesField(countryAndLanguageDetails),\n optionsForLanguage: getOptionsForLanguageField(\n countryAndLanguageDetails,\n countryCode\n ),\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { dispatch };\n};\n\nWizardStep1Form = connect(mapStateToProps, mapDispatchToProps)(WizardStep1Form);\n\nexport default WizardStep1Form;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport BasicSelectField from '../fields/BasicSelectField';\nimport getLocaleMessages from '../../utils/localesMessages';\n\nconst { label, helperText } = getLocaleMessages('buttonsV3/currency');\n\nconst renderReceivableCurrency = (props) => {\n const options = [...props.receivableCurrency];\n return ;\n};\n\nfunction Currency({ receivableCurrency, handleAmountFormatChange }) {\n return (\n \n );\n}\n\nCurrency.propTypes = {\n receivableCurrency: PropTypes.string,\n handleAmountFormatChange: PropTypes.func,\n};\n\nrenderReceivableCurrency.propTypes = {\n receivableCurrency: PropTypes.string,\n};\n\nexport default Currency;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react';\nimport BasicRadioField from '../fields/BasicRadioField';\nimport BasicInputField from '../fields/BasicInputField';\nimport { formatAmount } from '../../utils/amountUtils';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { isHostedFlow } from '../../utils/buttonFactoryUtils';\n\nconst {\n anyAmount,\n fixedAmount,\n presetAmounts,\n presetHelperText,\n amount,\n amount1,\n amount2,\n amount3,\n otherAmount,\n title,\n} = getLocaleMessages('buttonsV3/amountType');\n\nconst renderRadioField = (props) => {\n return ;\n};\n\nconst renderAmountValueField = (props) => {\n return ;\n};\n\nfunction AmountType({ receiverCurrency, amountType, handleAmountTypeChange }) {\n const formattedAmount = (value) =>\n value && formatAmount(value, receiverCurrency);\n\n return (\n <>\n \n {title}\n \n \n\n \n {amountType === 'fixed' ? (\n
\n \n
\n ) : null}\n\n {isHostedFlow() && (\n \n )}\n\n {amountType === 'merchant_recommended' && (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n {otherAmount}\n
\n
\n )}\n \n );\n}\n\nAmountType.propTypes = {\n receiverCurrency: PropTypes.string,\n amountType: PropTypes.string,\n handleAmountTypeChange: PropTypes.func,\n};\n\nexport default AmountType;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { formatAmount } from '../../utils/amountUtils';\nimport Currency from './Currency';\nimport AmountType from './AmountType';\n\nfunction AmountSetup({ application, formValues, change }) {\n const { receivableCurrency } = application;\n\n const getValue = (key) => {\n return formValues[key];\n };\n\n const receiverCurrency = getValue('receiverCurrency');\n const amountType = getValue('amountType');\n\n const handleAmountFormatChange = (event, currency) => {\n if (getValue('amountValue')) {\n const value = getValue('amountValue');\n const formattedAmount = formatAmount(value, currency);\n change('amountValue', formattedAmount);\n }\n\n if (\n getValue('merchantAmount1') ||\n getValue('merchantAmount2') ||\n getValue('merchantAmount3')\n ) {\n const merchantAmount1 = getValue('merchantAmount1');\n const formattedAmount1 = formatAmount(merchantAmount1, currency);\n change('merchantAmount1', formattedAmount1);\n\n const merchantAmount2 = getValue('merchantAmount2');\n const formattedAmount2 = formatAmount(merchantAmount2, currency);\n change('merchantAmount2', formattedAmount2);\n\n const merchantAmount3 = getValue('merchantAmount3');\n const formattedAmount3 = formatAmount(merchantAmount3, currency);\n change('merchantAmount3', formattedAmount3);\n }\n };\n\n const handleAmountTypeChange = () => {\n change('amountValue', '');\n change('merchantAmount1', '');\n change('merchantAmount2', '');\n change('merchantAmount3', '');\n };\n\n return (\n
\n \n \n
\n );\n}\n\nAmountSetup.propTypes = {\n application: PropTypes.object,\n formValues: PropTypes.object,\n change: PropTypes.func,\n};\n\nexport default AmountSetup;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Field, getFormValues } from 'redux-form';\nimport { renderSwitchComponent } from './SwitchPanel';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\n\nconst { coverFeesRadio = {} } = getLocaleMessages('buttonsV3/switches');\n\nconst CoverFeesSwitch = ({ formValues, showBadge }) => {\n return (\n \n );\n};\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3 = {} } = state;\n\n return {\n application,\n buttonFactoryV3,\n formValues: getFormValues(BTN_FACTORY_V3_FORM)(state),\n initialValues: buttonFactoryV3.formattedButton,\n };\n};\n\nCoverFeesSwitch.propTypes = {\n formValues: PropTypes.object,\n showBadge: PropTypes.bool,\n};\n\nexport default connect(mapStateToProps)(CoverFeesSwitch);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Field, getFormValues } from 'redux-form';\nimport { renderSwitchComponent } from './SwitchPanel';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\n\nconst { recurringRadio = {} } = getLocaleMessages('buttonsV3/switches');\n\nconst RecurringSwitch = ({ formValues }) => {\n return (\n \n );\n};\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3 = {} } = state;\n\n return {\n application,\n buttonFactoryV3,\n formValues: getFormValues(BTN_FACTORY_V3_FORM)(state),\n initialValues: buttonFactoryV3.formattedButton,\n };\n};\n\nRecurringSwitch.propTypes = {\n formValues: PropTypes.object,\n};\n\nexport default connect(mapStateToProps)(RecurringSwitch);\n","import React from 'react';\nimport { RadioButton } from '@paypalcorp/pp-react-radio';\nimport { Badge } from '@paypalcorp/pp-react-badge';\nimport getLocaleMessages from '../utils/localesMessages';\nimport PropTypes from 'prop-types';\nimport { appendCdnHostName } from '../../utility/geoUtils';\nimport getStore from '../store/configureStore';\nimport { shouldShowBadge } from '../utilsV3/badgeUtils';\n\nconst {\n main: { label },\n fullPage,\n popUp,\n} = getLocaleMessages('buttonsV3/fullPageVsPopup');\n\nconst FullPageVsPopup = ({ input: { value, onChange } }) => {\n const application = getStore()?.getState()?.application ?? {};\n const badgeContent = shouldShowBadge(\n application?.showNewFeatureBadge ?? false\n );\n\n const renderContent = (mainLabel, helperText, src) => {\n return (\n
\n \"\"\n \n {mainLabel}\n

{helperText}

\n
\n
\n );\n };\n\n const jsxLabel = (\n
\n
{label}
\n {badgeContent && (\n \n {badgeContent}\n \n )}\n
\n );\n\n return (\n onChange(e.target.value)}\n options={[\n {\n label: renderContent(\n fullPage.label,\n fullPage.helperText,\n appendCdnHostName(\n '/paypal-ui/illustrations/focused/svg/donate-full-page.svg'\n )\n ),\n value: 'yes',\n },\n {\n label: renderContent(\n popUp.label,\n popUp.helperText,\n appendCdnHostName(\n '/paypal-ui/illustrations/focused/svg/donate-pop-up.svg'\n )\n ),\n value: 'no',\n className: 'radio-btn-pop-up-v3',\n },\n ]}\n />\n );\n};\n\nFullPageVsPopup.propTypes = {\n input: PropTypes.object,\n};\n\nexport default FullPageVsPopup;\n","// External Imports\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { getFormValues, reduxForm, Field } from 'redux-form';\nimport PropTypes from 'prop-types';\n\n// PPUI Imports\nimport { Container } from '@paypalcorp/pp-react-grid';\nimport { Divider } from '@paypalcorp/pp-react';\n\n// Internal Imports\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { validate } from '../../lib/clientValidatorV3';\nimport AmountSetup from './AmountSetup';\nimport CoverFeesSwitch from '../switchPanels/CoverFeesSwitch';\nimport ProgramsV3 from '../programs/ProgramsV3';\nimport RecurringSwitch from '../switchPanels/RecurringSwitch';\nimport OrganizationName from './components/OrganizationName';\nimport Purpose from './components/Purpose';\nimport { isDonateButton, isHostedFlow } from '../../utils/buttonFactoryUtils';\nimport WizardNavButtons from '../navigationButtons/WizardNavButtons';\nimport FullPageVsPopup from '../FullPageVsPopup';\nimport StepHeader from './components/StepHeader';\nimport BannerImage from '../BannerImage/BannerImage';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport LogoExperience from '../logoExperience/LogoExperience';\n\nconst renderRadioField = (props) => {\n return ;\n};\n\nconst WizardStep2 = ({\n handleBack,\n handleSubmit,\n application,\n formValues,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n change,\n dispatch,\n buttonFactoryV3,\n logoClientError,\n bannerClientError,\n}) => {\n const trackPageLoadImpression = () => {\n if (isDonateButton()) {\n trackEventWithData(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_IM, { step: 2 });\n } else {\n trackEventWithData(FPTI_SPEC.SET_AMOUNT_PAGE_IM, { step: 2 });\n }\n };\n\n useEffect(() => {\n trackPageLoadImpression();\n }, []);\n\n const renderLinkFlow = () => {\n return (\n <>\n \n {isHostedFlow() && (\n \n )}\n \n {isHostedFlow() ? : null}\n \n );\n };\n\n return (\n <>\n \n \n
\n {isDonateButton() ? (\n <>\n \n {isHostedFlow() ? (\n <>\n \n \n \n ) : null}\n \n \n {isHostedFlow() ? (\n <>\n \n \n \n ) : null}\n \n ) : (\n renderLinkFlow()\n )}\n \n
\n \n \n );\n};\n\nWizardStep2.propTypes = {\n buttonFactoryV3: PropTypes.object,\n handleBack: PropTypes.func,\n handleSubmit: PropTypes.func,\n application: PropTypes.object,\n formValues: PropTypes.object,\n change: PropTypes.func,\n dispatch: PropTypes.func,\n onSubmit: PropTypes.func,\n logoClientError: PropTypes.func,\n bannerClientError: PropTypes.func,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n};\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3 = {} } = state;\n\n return {\n application,\n buttonFactoryV3,\n formValues: getFormValues(BTN_FACTORY_V3_FORM)(state),\n initialValues: buttonFactoryV3.formattedButton,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { dispatch };\n};\n\nlet WizardStep2Form = reduxForm({\n form: BTN_FACTORY_V3_FORM,\n keepDirtyOnReinitialize: true,\n destroyOnUnmount: false,\n forceUnregisterOnUnmount: true,\n validate,\n})(WizardStep2);\n\nWizardStep2Form = connect(mapStateToProps, mapDispatchToProps)(WizardStep2Form);\n\nexport default WizardStep2Form;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport getContent from 'pp-react-l10n';\nimport { renderSwitchComponent } from '../../switchPanels/SwitchPanel';\nimport TemplateData from '../../../../utility/getTemplateData';\n\nconst getMailingAddrContent = getContent('locals')('buttonsV3/mailingAddress');\nconst title = getMailingAddrContent('title');\nconst countryAndLocale = {\n country: TemplateData.country,\n locale: `${TemplateData.language}_${TemplateData.country}`,\n};\nconst mailingAddrSubTitle = getMailingAddrContent(\n 'subTitle',\n countryAndLocale,\n { useHTML: true }\n);\n\nfunction MailingAddressSwitch({ isChecked }) {\n return (\n \n );\n}\n\nMailingAddressSwitch.propTypes = {\n isChecked: PropTypes.bool,\n};\n\nexport default MailingAddressSwitch;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Field } from 'redux-form';\nimport { CaptionText } from '@paypalcorp/pp-react';\nimport { renderSwitchComponent } from '../../switchPanels/SwitchPanel';\nimport BasicInputField from '../../fields/BasicInputField';\nimport getLocaleMessages from '../../../utils/localesMessages';\n\nconst { title, subTitle, textInfo, textLabel } =\n getLocaleMessages('buttonsV3/note');\n\nconst renderNoteTextField = (props) => {\n return ;\n};\n\nfunction Note({ isChecked, showBadge, dispatch }) {\n return (\n
\n \n {isChecked ? (\n <>\n \n {textInfo}\n \n ) : null}\n
\n );\n}\n\nNote.propTypes = {\n isChecked: PropTypes.bool,\n dispatch: PropTypes.func,\n showBadge: PropTypes.bool,\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { dispatch };\n};\n\nexport default connect(null, mapDispatchToProps)(Note);\n","import { BodyText } from '@paypalcorp/pp-react-text';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Field } from 'redux-form';\n\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport BasicInputField from '../../fields/BasicInputField';\nimport { renderSwitchComponent } from '../../switchPanels/SwitchPanel';\n\nconst { advanced: { url = {} } = {} } = getLocaleMessages(\n 'buttonsV3/advancedUrls'\n);\n\nconst renderBasicInputField = (props) => {\n return ;\n};\n\nconst AdvancedUrls = ({ noCancelReturn }) => {\n const isChecked = noCancelReturn === 'no';\n\n return (\n <>\n \n\n {isChecked && (\n <>\n \n {url.cancelUrl?.instruction}\n \n \n\n \n {url.returnUrl?.instruction}\n \n \n \n )}\n \n );\n};\n\nAdvancedUrls.propTypes = {\n noCancelReturn: PropTypes.string,\n};\n\nexport default AdvancedUrls;\n","import React, { useState } from 'react';\nimport { isSupportedVariable } from '../../lib/extraVariables';\nimport _each from 'lodash/each';\nimport _head from 'lodash/head';\nimport _map from 'lodash/map';\nimport _isEmpty from 'lodash/isEmpty';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport PropTypes from 'prop-types';\nimport { CaptionText, V2CriticalSmIcon } from '@paypalcorp/pp-react';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC, SCREEN } from '../../utilsV3/fptiConstants';\n\nconst { advancedVariables: { single = {}, multiple = {} } = {} } =\n getLocaleMessages('buttonsV3/fieldErrors');\n\nconst ExtraVariablesTextArea = (props) => {\n const {\n input,\n meta: { touched, error, active },\n id,\n label,\n validateOnBlur,\n } = props;\n const hasError = validateOnBlur\n ? !active && touched && error\n : touched && error;\n const [errors, setErrors] = useState('');\n\n const getErrorHtml = (value) => {\n const variables = value.split('\\n');\n let unsupportedVariables = [];\n _each(variables, (variable) => {\n const key = _head(variable.split('='));\n if (key && !isSupportedVariable(key)) {\n unsupportedVariables.push(key);\n }\n });\n\n if (_isEmpty(unsupportedVariables)) {\n return null;\n }\n\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'INPUT_FIELD_VALIDATION_ERROR',\n error_desc: id,\n error_detail: 'Unsupported button variables',\n screen: SCREEN.ADVANCED_SETTINGS,\n });\n\n return (\n
\n \n
\n \n {unsupportedVariables.length === 1\n ? single.message\n : multiple.message}\n \n
\n {unsupportedVariables.length === 1 ? (\n {single.listHeader}\n ) : (\n {multiple.listHeader}\n )}\n
    \n {_map(unsupportedVariables, (variable, index) => {\n return
  • {variable}
  • ;\n })}\n
\n
\n
\n
\n );\n };\n\n const handleBlur = () => {\n const errorHtml = getErrorHtml(input?.value);\n setErrors(errorHtml);\n };\n\n return (\n
\n
\n {\n input.onBlur(event);\n handleBlur(event);\n }}\n />\n {errors}\n
\n
\n );\n};\n\nExtraVariablesTextArea.propTypes = {\n input: PropTypes.object,\n label: PropTypes.string,\n meta: PropTypes.object,\n id: PropTypes.string,\n validateOnBlur: PropTypes.bool,\n};\n\nexport default ExtraVariablesTextArea;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport { Link } from '@paypalcorp/pp-react-links';\n\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { renderSwitchComponent } from '../../switchPanels/SwitchPanel';\nimport ExtraVariablesTextArea from '../../fields/ExtraVariablesTextArea';\n\nconst { advanced: { variables = {} } = {} } = getLocaleMessages(\n 'buttonsV3/advancedVariables'\n);\n\nconst renderExtraVariablesAreaField = (props) => {\n return ;\n};\n\nconst AdvancedVariables = ({ extraVariablesView, noAdvancedVariables }) => {\n const isChecked = noAdvancedVariables === 'no';\n\n return (\n <>\n \n\n {isChecked && (\n
\n \n {variables.devDoc}\n \n\n \n
\n )}\n \n );\n};\n\nAdvancedVariables.propTypes = {\n extraVariablesView: PropTypes.string,\n noAdvancedVariables: PropTypes.string,\n};\n\nexport default AdvancedVariables;\n","// External Imports\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { getFormValues, reduxForm } from 'redux-form';\nimport PropTypes from 'prop-types';\n\n// PPUI Imports\nimport { Container } from '@paypalcorp/pp-react-grid';\n\n// Internal Imports\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { validate } from '../../lib/clientValidatorV3';\nimport AmountSetup from './AmountSetup';\nimport StepHeader from './components/StepHeader';\nimport { isDonateButton, isHostedFlow } from '../../utils/buttonFactoryUtils';\nimport MailingAddressSwitch from './components/MailingAddressSwitch';\nimport Note from './components/Note';\nimport AdvancedUrls from './components/AdvancedUrls';\nimport AdvancedVariables from './components/AdvancedVariables';\nimport RecurringSwitch from '../switchPanels/RecurringSwitch';\nimport CoverFeesSwitch from '../switchPanels/CoverFeesSwitch';\nimport ProgramsV3 from '../programs/ProgramsV3';\nimport WizardNavButtons from '../navigationButtons/WizardNavButtons';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\nimport { trackEventWithData } from '../../utilsV3/analytics';\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3: { formattedButton = {} } = {} } =\n state;\n\n return {\n application,\n formValues: getFormValues(BTN_FACTORY_V3_FORM)(state),\n initialValues: formattedButton,\n };\n};\n\nconst WizardStep3 = ({\n handleBack,\n handleSubmit,\n application,\n formValues,\n change,\n}) => {\n const trackPageLoadImpression = () => {\n if (isDonateButton()) {\n trackEventWithData(FPTI_SPEC.SET_AMOUNT_PAGE_IM, { step: 3 });\n } else {\n trackEventWithData(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_IM, { step: 3 });\n }\n };\n\n useEffect(() => {\n trackPageLoadImpression();\n }, []);\n\n return (\n <>\n \n \n\n
\n {isDonateButton() ? (\n <>\n \n \n {isHostedFlow() ? (\n <>\n \n \n \n ) : null}\n \n ) : (\n <>\n \n \n \n \n \n )}\n \n
\n \n \n );\n};\n\nWizardStep3.propTypes = {\n buttonFactoryV3: PropTypes.object,\n handleBack: PropTypes.func,\n handleSubmit: PropTypes.func,\n application: PropTypes.object,\n formValues: PropTypes.object,\n change: PropTypes.func,\n onSubmit: PropTypes.func,\n};\n\nlet WizardStep3Form = reduxForm({\n form: BTN_FACTORY_V3_FORM,\n keepDirtyOnReinitialize: true,\n destroyOnUnmount: false,\n forceUnregisterOnUnmount: true,\n validate,\n})(WizardStep3);\n\nWizardStep3Form = connect(mapStateToProps)(WizardStep3Form);\n\nexport default WizardStep3Form;\n","// External Imports\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { getFormValues, reduxForm } from 'redux-form';\nimport PropTypes from 'prop-types';\n\n// PPUI Imports\nimport { Container } from '@paypalcorp/pp-react-grid';\n\n// Internal Imports\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport { validate } from '../../lib/clientValidatorV3';\nimport MailingAddressSwitch from './components/MailingAddressSwitch';\nimport Note from './components/Note';\nimport StepHeader from './components/StepHeader';\nimport AdvancedUrls from './components/AdvancedUrls';\nimport AdvancedVariables from './components/AdvancedVariables';\nimport WizardNavButtons from '../navigationButtons/WizardNavButtons';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\nimport { trackEventWithData } from '../../utilsV3/analytics';\n\nconst WizardStep4 = ({ handleBack, handleSubmit, formValues, application }) => {\n const trackPageLoadImpression = () => {\n trackEventWithData(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_IM, { step: 4 });\n };\n\n useEffect(() => {\n trackPageLoadImpression();\n }, []);\n\n return (\n <>\n \n \n\n
\n \n \n \n \n \n
\n \n \n );\n};\n\nWizardStep4.propTypes = {\n buttonFactoryV3: PropTypes.object,\n handleBack: PropTypes.func,\n handleSubmit: PropTypes.func,\n formValues: PropTypes.object,\n onSubmit: PropTypes.func,\n application: PropTypes.object,\n};\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3 = {} } = state;\n\n return {\n application,\n buttonFactoryV3,\n formValues: getFormValues(BTN_FACTORY_V3_FORM)(state),\n initialValues: buttonFactoryV3.formattedButton,\n };\n};\n\nlet WizardStep4Form = reduxForm({\n form: BTN_FACTORY_V3_FORM,\n keepDirtyOnReinitialize: true,\n destroyOnUnmount: false,\n forceUnregisterOnUnmount: true,\n validate,\n})(WizardStep4);\n\nWizardStep4Form = connect(mapStateToProps)(WizardStep4Form);\n\nexport default WizardStep4Form;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { HeadingText, BodyText } from '@paypalcorp/pp-react';\nimport { appendCdnHostName } from '../../../../utility/geoUtils';\n\nconst ValuePropCard = ({ heading, body, imgSrc }) => {\n return (\n
\n \n \n {heading}\n \n {body}\n
\n );\n};\n\nValuePropCard.propTypes = {\n heading: PropTypes.string,\n body: PropTypes.string,\n imgSrc: PropTypes.string,\n};\n\nexport default ValuePropCard;\n","import React from 'react';\nimport ValuePropCard from './ValuePropCard';\nimport getLocaleMessages from '../../../utils/localesMessages';\n\nconst { valueProp } = getLocaleMessages('buttonsV3/login');\n\nconst images = [\n '/paypal-ui/illustrations/focused/svg/donation-page-hourglass.svg',\n '/paypal-ui/illustrations/focused/svg/hand-image.svg',\n '/paypal-ui/illustrations/focused/svg/money-down.svg',\n];\n\nconst ValueProp = () => {\n const getValuePropContent = () => {\n return Object.keys(valueProp).map((key) => valueProp[key]);\n };\n return (\n
\n
\n {getValuePropContent().map((col, index) => (\n \n ))}\n
\n
\n );\n};\n\nexport default ValueProp;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, HeadingText, BodyText } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../../utils/localesMessages';\nimport { appendCdnHostName } from '../../../../utility/geoUtils';\n\nconst { header, loginButton, signUp } = getLocaleMessages('buttonsV3/login');\n\nconst Login = ({ handleLogin, handleSignUp }) => {\n return (\n
\n
\n \n {header.title}\n \n {header.body}\n \n {loginButton}\n \n \n
\n
\n \n
\n
\n );\n};\n\nLogin.propTypes = {\n handleLogin: PropTypes.func,\n handleSignUp: PropTypes.func,\n};\n\nexport default Login;\n","import React from 'react';\nimport get from 'lodash/get';\nimport {\n HeadingText,\n BodyText,\n Accordion,\n AccordionRow,\n} from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../../utils/localesMessages';\n\nconst { faq = {} } = getLocaleMessages('buttonsV3/login');\n\nconst Faq = () => {\n const getFaqContent = () => {\n const groups = get(faq, 'questions', {});\n return Object.keys(groups).map((key) => groups[key]);\n };\n\n return (\n
\n \n {faq.title}\n \n
\n \n {getFaqContent().map((row, index) => (\n \n {row.question}\n \n }\n key={index}\n >\n \n \n \n \n ))}\n \n
\n
\n );\n};\n\nexport default Faq;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport ValueProp from './components/ValueProp';\nimport Login from './components/Login';\nimport Faq from './components/Faq';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { FPTI_SPEC } from '../../utilsV3/fptiConstants';\n\nconst ButtonFactoryLogin = ({ handleLogin, handleSignUp }) => {\n useEffect(() => {\n trackEventWithData(FPTI_SPEC.LANDING_PAGE_IM);\n }, []);\n\n return (\n
\n \n \n \n
\n );\n};\n\nButtonFactoryLogin.propTypes = {\n handleLogin: PropTypes.func,\n handleSignUp: PropTypes.func,\n};\nexport default ButtonFactoryLogin;\n","import React from 'react';\nimport CommonPreviewComponent from './CommonPreviewComponent';\nimport getLocaleMessages from '../../utils/localesMessages';\nconst messages = getLocaleMessages('buttonsV3/buttonPreview');\n\nconst ButtonFactoryV3MobilePreview = () => {\n return (\n \n
\n
\n
\n
\n \n\n
\n
\n );\n};\n\nexport default ButtonFactoryV3MobilePreview;\n","import React, { useState, useEffect } from 'react';\nimport { HeadingText } from '@paypalcorp/pp-react';\nimport { Tabs, TabPanel } from '@paypalcorp/pp-react-tabs';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport ButtonFactoryV3SdkPreview from './ButtonFactoryV3SdkPreview';\nimport ButtonFactoryV3MobilePreview from './ButtonFactoryV3MobilePreview';\nimport ButtonFactoryV3DesktopPreview from './ButtonFactoryV3DesktopPreview';\nimport PropTypes from 'prop-types';\nimport { StyleSheet, css } from '../../../utility/paypalAphrodite';\nimport { trackEventWithData } from '../../utilsV3/analytics';\nimport { isGuestFormPreview } from '../../utils/buttonFactoryUtils';\n\nconst STYLES = StyleSheet.create({\n previewTabWrapper: {\n paddingLeft: '15.725em',\n },\n});\n\nconst { navigator: { fullPage: { desktop, mobile } } = {} } = getLocaleMessages(\n 'buttonsV3/buttonPreview'\n);\nconst { previewTitle, previewTitlePayment } =\n getLocaleMessages('buttonsV3/common');\n\nconst PreviewNavigator = ({\n currentStep,\n formValues: { useFullPageExperience = 'yes' } = {},\n fptiSpec = {},\n isMobile,\n} = {}) => {\n const [selectedTabIdx, setSelectedTabIdx] = useState(0);\n const renderFullPagePreview = useFullPageExperience === 'yes';\n\n const handleTabClick = (e, tabIdx) => {\n trackEventWithData(fptiSpec, {\n step: currentStep,\n link: tabIdx === '0' ? 'desktop' : 'mobile',\n });\n setSelectedTabIdx(tabIdx); // Second argument from pp-react onClick prop is the clicked tab index\n };\n\n useEffect(() => {\n setSelectedTabIdx(0);\n }, [useFullPageExperience]);\n\n const previewTabs = [\n { label: desktop, id: 'desktop', panelId: 'desktop' },\n { label: mobile, id: 'mobile', panelId: 'mobile' },\n ];\n const isGuestPagePreview = isGuestFormPreview(currentStep);\n\n return (\n <>\n \n {isGuestPagePreview ? previewTitlePayment : previewTitle}\n \n \n \n {renderFullPagePreview ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n );\n};\n\nPreviewNavigator.propType = {\n currentStep: PropTypes.number,\n formValues: PropTypes.object,\n fptiSpec: PropTypes.object,\n isMobile: PropTypes.bool,\n};\n\nexport default PreviewNavigator;\n","import * as analytics from '../../vendor/analytics/index';\nimport { getUserType } from './authUtils';\nimport _includes from 'lodash/includes';\n\nexport function trackWizardStep(data) {\n const pageType = getPageType();\n const stepNum = data.step;\n\n trackPageWithData(\n `main:wps:donate:button:setup:wizard:${pageType}:${stepNum}`,\n `main:wps:donate:button:setup:wizard:${pageType}:${stepNum}`,\n data\n );\n}\n\nexport function trackWizardDetailsPage(data) {\n const pageType = getPageType();\n const tab = data.tab;\n\n trackPageWithData(\n `main:wps:donate:button:setup:details:${pageType}:${tab}`,\n `main:wps:donate:button:setup:details:${pageType}:${tab}`,\n data\n );\n}\n\nfunction getPageType() {\n const isHosted = _includes(['BUSINESS', 'PREMIER'], getUserType());\n return isHosted ? 'hosted' : 'unhosted';\n}\n\nexport function trackPageWithData(pageGroup, pageName, data) {\n analytics.trackPageWithData(pageGroup, pageName, data);\n}\n\nexport function trackLinkClick(linkName, pageGroup, pageName) {\n analytics.trackLink(linkName, pageGroup, pageName, 'link');\n}\n\nexport function trackErrorImpressionWithData(data) {\n const { pgrp, page } = window.fpti;\n analytics.trackErrorWithData(pgrp, page, data);\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { HeadingText } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport ButtonPreviewContainer from './ButtonPreviewContainer';\n\nconst { previewContainerHeader } = getLocaleMessages('buttonsV3/buttonPreview');\n\nconst WizardStep1Preview = ({\n usePaypalButtonStyle,\n buttonSize,\n showAcceptedCardLogos,\n buttonImageUrl,\n onError,\n locale,\n country,\n isMobile,\n}) => {\n return (\n
\n {!isMobile ? (\n \n {previewContainerHeader}\n \n ) : null}\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\nWizardStep1Preview.propTypes = {\n usePaypalButtonStyle: PropTypes.bool,\n buttonSize: PropTypes.string,\n showAcceptedCardLogos: PropTypes.bool,\n buttonImageUrl: PropTypes.string,\n onError: PropTypes.func,\n locale: PropTypes.string,\n country: PropTypes.string,\n isMobile: PropTypes.bool,\n};\n\nexport default WizardStep1Preview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Button, ShowAltIcon, Sheet } from '@paypalcorp/pp-react';\nimport CommonPreviewComponent from './CommonPreviewComponent';\nimport {\n isDonateButton,\n isTablet,\n isDonateLink,\n isHostedFlow,\n} from '../../utils/buttonFactoryUtils';\nimport ButtonFactoryV3DesktopPreview from './ButtonFactoryV3DesktopPreview';\nimport WizardStep1Preview from './WizardStep1Preview';\nfunction WizardMobilePreview({\n handleSubmit,\n openMobilePreview,\n isMobilePreviewOpen,\n closeMobilePreview,\n usePaypalButtonStyle,\n buttonSize,\n showAcceptedCardLogos,\n buttonImageUrl,\n onError,\n locale,\n country,\n steps: { currentStep, totalSteps },\n labels: { continueButton, finishButton, previewButton, previewTitle },\n showSpinner,\n buttonDropzoneSubmit,\n handleBannerAndLogoErrorCheck,\n}) {\n function renderPreview() {\n const isMobile = !isTablet();\n if (currentStep === 1 && isDonateButton()) {\n return (\n \n );\n }\n return isMobile ? (\n \n ) : (\n \n );\n }\n\n const handleButtonClick = () => {\n if (currentStep === 1) {\n if (isDonateLink()) {\n const res = handleBannerAndLogoErrorCheck();\n if (res) {\n handleSubmit();\n }\n } else {\n buttonDropzoneSubmit();\n }\n } else if (currentStep === 2 && isHostedFlow()) {\n const res = handleBannerAndLogoErrorCheck();\n if (res) {\n handleSubmit();\n }\n } else {\n handleSubmit();\n }\n };\n\n return (\n <>\n \n \n {currentStep === totalSteps ? finishButton : continueButton}\n \n \n \n {previewButton}\n \n \n \n {renderPreview()}\n \n \n );\n}\n\nWizardMobilePreview.propTypes = {\n handleSubmit: PropTypes.func,\n openMobilePreview: PropTypes.func,\n isMobilePreviewOpen: PropTypes.bool,\n closeMobilePreview: PropTypes.func,\n steps: PropTypes.object,\n labels: PropTypes.object,\n usePaypalButtonStyle: PropTypes.bool,\n buttonSize: PropTypes.string,\n showAcceptedCardLogos: PropTypes.bool,\n buttonImageUrl: PropTypes.string,\n onError: PropTypes.func,\n locale: PropTypes.string,\n country: PropTypes.string,\n showSpinner: PropTypes.bool,\n buttonDropzoneSubmit: PropTypes.func,\n handleBannerAndLogoErrorCheck: PropTypes.func,\n};\n\nexport default WizardMobilePreview;\n","// External Imports\nimport React, { useEffect, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { SubmissionError, submit, change } from 'redux-form';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport _get from 'lodash/get';\nimport _isEmpty from 'lodash/isEmpty';\nimport throttle from 'lodash/throttle';\n\n// PPUI Imports\nimport {\n Container,\n Col,\n Row,\n Button,\n ArrowLeftIcon,\n Toast,\n IconButton,\n} from '@paypalcorp/pp-react';\nimport { ProgressMeter } from '@paypalcorp/pp-react-progress-meter';\n\n// Internal Imports\nimport WizardStep1Form from './WizardStepsV3/WizardStep1';\nimport WizardStep2Form from './WizardStepsV3/WizardStep2';\nimport WizardStep3Form from './WizardStepsV3/WizardStep3';\nimport WizardStep4Form from './WizardStepsV3/WizardStep4';\nimport ExtendSession from './ExtendSession';\nimport { isLoggedInUser } from '../utils/authUtils';\nimport { hideSpinner, showSpinner } from '../utils/spinnerUtils';\nimport ButtonFactoryLogin from './login/ButtonFactoryLogin';\nimport PreviewNavigator from './preview/PreviewNavigator';\nimport * as ButtonFactoryActions from '../actions/actionsButtonFactory';\nimport { getParameterByName } from '../../utility/queryStringHelper';\nimport {\n getPageUrl,\n getStepUrl,\n isDonateButton,\n isHostedFlow,\n isUnhostedFlow,\n getWizardTotalSteps,\n getFlowType,\n isDonateLink,\n handleLoginHelper,\n handleSignupHelper,\n} from '../utils/buttonFactoryUtils';\nimport { trackWizardDetailsPage } from '../utils/ButtonFactoryFPT';\nimport {\n getButtonVariable,\n mapServerFieldToClientField,\n shouldUsePayPalButtonStyle,\n} from '../lib/buttonModelV3';\nimport getLocaleMessages from '../utils/localesMessages';\nimport DonateButtonFeedback from './DonateButtonFeedback';\nimport WizardMobilePreview from './preview/WizardMobilePreview';\nimport { BTN_FACTORY_V3_FORM, MAX_MOBILE_WIDTH } from '../clientConstants';\nimport WizardStep1Preview from './preview/WizardStep1Preview';\nimport { getOptionsForLanguageField } from '../utils/buttonFactoryUtils';\nimport { ACTION, FPTI_SPEC, SCREEN } from '../utilsV3/fptiConstants';\nimport {\n trackEventWithData,\n trackEventWithGlobalData,\n} from '../utilsV3/analytics';\nimport CountryNotSupportedTile from './modals/CountryNotSupportedTile';\nimport BasicModal from '../componentsV3/modals/BasicModal';\nimport {\n LOGO_TARGET_BUTTON,\n LOGO_TARGET_PROFILE,\n LOGO_TARGET_NOLOGO,\n} from '../reducers/reducerButtonFactoryV3';\n\nconst { actionable, quitModal, unactionable } =\n getLocaleMessages('buttonsV3/errors');\nconst {\n continueButton,\n finishButton,\n previewButton,\n previewDonatePage,\n previewTitle,\n backFundraisers,\n toast: { duplicatePage } = {},\n} = getLocaleMessages('buttonsV3/common');\nconst { stepTitle, stepCount } = getLocaleMessages('buttonsV3/progressMeter');\nconst { previewContainerHeader } = getLocaleMessages('buttonsV3/buttonPreview');\nconst errors = getLocaleMessages('buttonsV3/fieldErrors');\n\nconst progressMeterTitles = isDonateButton()\n ? stepTitle.button\n : stepTitle.link;\n\n// Workaround for issue in content fro link flow step 2\n// TODO: Remove this if once we get correct content fro progressMeter.properties\nif (isDonateLink()) {\n progressMeterTitles[2] = stepTitle.button[3];\n}\n\nconst ButtonFactoryWizardV3 = ({\n application = {},\n buttonFactoryV3 = {},\n destroyForm,\n dispatch,\n form: { buttonFactoryV3: { values: formValues = {} } = {} } = {},\n getButton,\n goToNextStep,\n goToPreviousStep,\n history,\n initializeWizard,\n location,\n match,\n saveButton,\n uploadImage,\n updateBusinessProfileLogo,\n updateBusinessImageUrls,\n updateFlowSpec,\n setCurrentStep,\n openMobilePreview,\n closeMobilePreview,\n updateIsMobile,\n optionsForLanguage,\n}) => {\n const { busy, currentStep, totalSteps } = buttonFactoryV3;\n const [cancelBtnFptiSpec, setCancelBtnFptiSpec] = useState({});\n const [backBtnFptiSpec, setBackBtnFptiSpec] = useState({});\n const [continueBtnFptiSpec, setContinueBtnFptiSpec] = useState({});\n const [finishBtnFptiSpec, setFinishBtnFptiSpec] = useState({});\n const [backToManageFptiSpec, setBackToManageFptiSpec] = useState({});\n const [feedbackBtnFptiSpec, setFeedbackBtnFptiSpec] = useState({});\n const [previewTabFptiSpec, setPreviewTabFptiSpec] = useState({});\n const [screen, setScreen] = useState('');\n\n // Wizard step 1 Dropzone handle variables\n const [showButtonSpinner, setShowButtonSpinner] = useState(false);\n const [imageUpdated, setImageUpdated] = useState(false);\n const [dropzoneError, setDropzoneError] = useState('');\n\n const [logoClientError, setLogoClientError] = useState('');\n const [bannerClientError, setBannerClientError] = useState('');\n\n const isHosted = isHostedFlow();\n const isButtonFlow = isDonateButton();\n const isButtonConfigurePage = isButtonFlow && currentStep === 1,\n isExperienceSetupPage =\n (isButtonFlow && currentStep === 2) ||\n (!isButtonFlow && currentStep === 1),\n isSetAmountPage =\n (isButtonFlow && currentStep === 3) ||\n (!isButtonFlow && currentStep === 2),\n isAdvancedSettingsPage =\n (isButtonFlow && isHosted && currentStep === 4) ||\n (!isButtonFlow && currentStep === 3);\n\n const {\n amountType,\n bannerImageUrl,\n buttonImageUrl,\n buttonSize,\n cancelReturn,\n countryCode,\n coverFeesEnabled,\n extraVariablesView,\n language,\n listPrograms,\n noAdvancedVariables,\n noBannerImage,\n noCancelReturn,\n noLogoImage,\n noNote,\n noShipping,\n purpose,\n receiverCurrency,\n recurringEnabled,\n return: returnUrl,\n showAcceptedCardLogos,\n useFullPageExperience,\n usePaypalButtonStyle,\n } = formValues;\n const isDuplicating = !(match.path.indexOf('/duplicate') === -1);\n const isEditing = !(match.path.indexOf('/edit') === -1);\n\n const [isCountryNotSupported, setIsCountryNotSupported] = useState(false);\n const [shouldShowQuitModal, setShouldShowQuitModal] = useState(false);\n const [shouldShowActionableErrorModal, setShouldShowActionableErrorModal] =\n useState(false);\n const [errorCode, setErrorCode] = useState(null);\n const [errorDesc, setErrorDesc] = useState(null);\n const [\n shouldShowUnactionableErrorModal,\n setShouldShowUnactionableErrorModal,\n ] = useState(false);\n const [shouldShowDuplicateToast, setShouldShowDuplicateToast] =\n useState(false);\n\n const wizardContainer = document.getElementsByClassName(\n 'wizard-step-container'\n );\n\n const initializeWizardComponent = (button) => {\n initializeWizard(button);\n\n if (currentStep !== 1) {\n const firstPageUrl = getStepUrl(location, currentStep, 1);\n history.replace(firstPageUrl);\n }\n };\n\n const handleUnhostedButton = () => {\n const { button = {} } = buttonFactoryV3;\n if (_isEmpty(button)) {\n window.location.href = `/donate/buttons${location.search}`;\n } else {\n initializeWizardComponent(button);\n }\n };\n\n const handleButtonPreviewError = (e) => {\n console.log('handleButtonPreviewError ', e);\n };\n\n const getLanguage = () => {\n if (language) {\n return language;\n }\n const languages = optionsForLanguage;\n // Return first language\n return _get(languages, '[0].value');\n };\n\n const checkDeviceType = () => {\n updateIsMobile(window.innerWidth < MAX_MOBILE_WIDTH, 200);\n };\n\n const setFptiSpecs = () => {\n if (isButtonConfigurePage) {\n setContinueBtnFptiSpec(FPTI_SPEC.CONFIGURE_BUTTON_PAGE_CONTINUE_CL);\n setBackToManageFptiSpec(FPTI_SPEC.CONFIGURE_BUTTON_PAGE_NAV_BACK_CL);\n setFeedbackBtnFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_FEEDBACK_CL);\n setScreen(SCREEN.CONFIGURE_BUTTON);\n } else if (isExperienceSetupPage) {\n setContinueBtnFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_CONTINUE_CL);\n setBackBtnFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_BACK_CL);\n setBackToManageFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_NAV_BACK_CL);\n setFeedbackBtnFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_FEEDBACK_CL);\n setPreviewTabFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_PREVIEW_TAB_CL);\n setScreen(SCREEN.EXPERIENCE_SETUP);\n } else if (isSetAmountPage) {\n setContinueBtnFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_CONTINUE_CL);\n setBackBtnFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_BACK_CL);\n setBackToManageFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_NAV_BACK_CL);\n setFeedbackBtnFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_FEEDBACK_CL);\n setPreviewTabFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_PREVIEW_TAB_CL);\n setScreen(SCREEN.SET_AMOUNT);\n } else if (isAdvancedSettingsPage) {\n setBackBtnFptiSpec(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_BACK_CL);\n setBackToManageFptiSpec(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_NAV_BACK_CL);\n setFeedbackBtnFptiSpec(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_FEEDBACK_CL);\n setPreviewTabFptiSpec(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_PREVIEW_TAB_CL);\n setScreen(SCREEN.ADVANCED_SETTINGS);\n }\n\n if (isButtonConfigurePage) {\n setCancelBtnFptiSpec(FPTI_SPEC.CONFIGURE_BUTTON_PAGE_CANCEL_CL);\n } else if (isExperienceSetupPage && !isButtonFlow) {\n setCancelBtnFptiSpec(FPTI_SPEC.EXPERIENCE_SETUP_PAGE_CANCEL_CL);\n }\n\n if (isAdvancedSettingsPage) {\n setFinishBtnFptiSpec(FPTI_SPEC.ADVANCED_SETTINGS_PAGE_FINISH_CL);\n } else if (isSetAmountPage && isUnhostedFlow) {\n setFinishBtnFptiSpec(FPTI_SPEC.SET_AMOUNT_PAGE_FINISH_CL);\n }\n };\n\n const handleUnsupportedCountries = () => {\n setIsCountryNotSupported(true);\n hideSpinner();\n return;\n };\n\n useEffect(() => {\n const buttonId = _get(match, 'params.buttonId');\n const isLoggedIn = isLoggedInUser(application);\n\n if (!isLoggedIn) {\n hideSpinner();\n return;\n } else if (isLoggedIn && application.isUnsupported) {\n handleUnsupportedCountries();\n }\n\n checkDeviceType();\n window.addEventListener('resize', throttle(checkDeviceType, 200));\n\n if (buttonId === 'unhosted') {\n handleUnhostedButton();\n return;\n }\n\n if (!_isEmpty(buttonId)) {\n showSpinner();\n getButton(buttonId)\n .then((response) => {\n if (!_isEmpty(response?.name)) {\n const code = response?.name;\n window.location.href = `/donate/buttons/manage?error=${code}`;\n } else {\n const flowType = getFlowType();\n updateFlowSpec({\n flowType,\n totalSteps: getWizardTotalSteps(flowType),\n });\n hideSpinner();\n }\n })\n .catch((error) => {\n showSpinner();\n const code = _get(error, 'responseJSON.button.name');\n window.location.href = `/donate/buttons/manage?error=${code}`;\n });\n } else {\n // If buttonId is not present, meaning that this is new button\n // creation and the edit/duplicate routes are excluded\n // We need to check if fromManage=true is available in the query\n // param, if not, redirect user to manage page\n const fromManage = getParameterByName('fromManage');\n if (!fromManage) {\n window.location.href = '/donate/buttons/manage';\n } else {\n initializeWizardComponent();\n const flowType = getFlowType();\n updateFlowSpec({\n flowType,\n totalSteps: getWizardTotalSteps(flowType),\n });\n hideSpinner();\n }\n }\n\n setCurrentStep(currentStep);\n\n if (isDuplicating) {\n setShouldShowDuplicateToast(true);\n }\n }, []);\n\n useEffect(() => {\n setFptiSpecs();\n }, [currentStep]);\n\n const handleLogin = () => {\n trackEventWithData(FPTI_SPEC.LANDING_PAGE_LOGIN_CL, { version: '3.0' });\n handleLoginHelper(history);\n };\n\n const handleSignUp = () => {\n trackEventWithData(FPTI_SPEC.LANDING_PAGE_SIGNUP_CL, { version: '3.0' });\n handleSignupHelper(history);\n };\n\n const handleBackClick = () => {\n const prevPageUrl = getStepUrl(location, currentStep, currentStep - 1);\n\n trackEventWithData(backBtnFptiSpec, { step: currentStep });\n\n goToPreviousStep();\n history.push(prevPageUrl);\n };\n\n const handleContinueClick = () => {\n const nextPageUrl = getStepUrl(location, currentStep, currentStep + 1);\n\n trackEventWithGlobalData(continueBtnFptiSpec, {\n ...(isButtonConfigurePage\n ? {\n button_size: buttonSize,\n button_type:\n usePaypalButtonStyle === 'yes' ? 'PAYPAL' : 'customized',\n ...(usePaypalButtonStyle === 'yes'\n ? { card_logo: showAcceptedCardLogos ? 'Yes' : 'No' }\n : {}),\n page_language: language,\n receiver_country: countryCode,\n step: currentStep,\n }\n : {}),\n ...(isExperienceSetupPage\n ? {\n display_type:\n useFullPageExperience === 'no' ? 'pop-up' : 'full page',\n logo: noLogoImage === 'yes' ? 'off' : 'on',\n img: noBannerImage === 'yes' ? 'off' : 'on',\n message: !_isEmpty(purpose) ? 'yes' : 'no',\n step: currentStep,\n }\n : {}),\n ...(isSetAmountPage\n ? {\n amount_type: amountType,\n choose_program: listPrograms === 'yes' ? 'on' : 'off',\n curr: receiverCurrency,\n fee_type: coverFeesEnabled === 'yes' ? 'offset' : 'none',\n is_recurring: recurringEnabled === 'yes' ? 'on' : 'off',\n step: currentStep,\n }\n : {}),\n });\n\n goToNextStep();\n history.push(nextPageUrl);\n if (buttonFactoryV3.isMobile) {\n window.scrollTo(0, 0);\n } else {\n wizardContainer.scrollTop = 0;\n }\n };\n\n const handleCancelClick = () => {\n trackEventWithData(cancelBtnFptiSpec, { step: currentStep });\n setShouldShowQuitModal(true);\n };\n\n const handleTopCancelClick = () => {\n trackEventWithData(backToManageFptiSpec, { step: currentStep });\n setShouldShowQuitModal(true);\n };\n\n const handleQuitClick = () => {\n showSpinner();\n trackEventWithData(FPTI_SPEC.ALERT_MODAL_CONFIRM_CL, {\n action: ACTION.QUIT,\n step: 1,\n link: 'quit',\n });\n window.location.pathname = '/donate/buttons/manage';\n wizardContainer.scrollTop = 0;\n };\n\n const closeQuitModal = () => {\n trackEventWithData(FPTI_SPEC.ALERT_MODAL_CANCEL_CL, {\n action: ACTION.QUIT,\n step: 1,\n link: 'finish_create_page',\n });\n setShouldShowQuitModal(false);\n };\n\n const dismissQuitModal = () => {\n trackEventWithData(FPTI_SPEC.ALERT_MODAL_DISMISS_CL, {\n action: ACTION.QUIT,\n step: 1,\n });\n setShouldShowQuitModal(false);\n };\n\n const renderQuitModal = () => {\n const fptiSpec = {\n impression: FPTI_SPEC.ALERT_MODAL_IM,\n data: {\n action: ACTION.QUIT,\n step: 1,\n },\n };\n return (\n \n );\n };\n\n const getErrorMsg = (field) => {\n if (actionable[field]) {\n return actionable[field];\n }\n return actionable.default;\n };\n\n const jumpToErrorPage = (field) => {\n const currentPath = location.pathname;\n let targetPage = 1;\n\n if (['buttonImageUrl', 'countryCode', 'language'].includes(field)) {\n targetPage = 1;\n } else if (['purpose', 'logoUrl', 'bannerImageUrl'].includes(field)) {\n targetPage = isButtonFlow ? 2 : 1;\n } else if (\n [\n 'receiverCurrency',\n 'amountValue',\n 'merchantAmount1',\n 'merchantAmount2',\n 'merchantAmount3',\n 'programNames',\n ].includes(field)\n ) {\n targetPage = isButtonFlow ? 3 : 2;\n } else if (\n ['noteLabel', 'return', 'cancelReturn', 'extraVariablesView'].includes(\n field\n )\n ) {\n targetPage = isButtonFlow ? 4 : 3;\n }\n\n setCurrentStep(targetPage);\n history.push(getPageUrl(targetPage, currentPath));\n };\n\n const handleServerSideError = (error) => {\n if (error) {\n setErrorCode(error.name);\n switch (error.name) {\n case 'VALIDATION': {\n // detail[0].field is in the format of button_variable.business\n // get the actual field name\n const errorFieldDetail = _get(error, 'details[0].field');\n const errField = errorFieldDetail\n ? errorFieldDetail.split('.').slice(-1)[0]\n : errorFieldDetail;\n const errMsg = getErrorMsg(errField);\n const clientFieldName = mapServerFieldToClientField(errField);\n\n let errObj = {};\n errObj[clientFieldName] = errMsg;\n\n setShouldShowActionableErrorModal(true);\n setErrorDesc(JSON.stringify(errorFieldDetail));\n jumpToErrorPage(clientFieldName);\n return errObj;\n }\n case 'COUNTRY_NOT_ALLOWED':\n case 'UNAVAILABLE_FOR_NON_PPCC': {\n let wizard = document.getElementById('button-factory-wizard');\n wizard.parentNode.removeChild(wizard);\n let marketingFooter =\n document.getElementsByClassName('global-footer')[0];\n if (marketingFooter) {\n marketingFooter.setAttribute(\n 'style',\n 'position: absolute; bottom: 0px; width: 100%; top: inherit'\n );\n }\n }\n // eslint-disable-next-line no-fallthrough\n default: {\n setErrorCode('UNACTIONABLE');\n setShouldShowUnactionableErrorModal(true);\n return;\n }\n }\n } else {\n setShouldShowUnactionableErrorModal(true);\n }\n };\n\n const saveButtonErrorHandler = (response, reject) => {\n const errObj = handleServerSideError(_get(response, 'responseJSON.button'));\n\n if (!_isEmpty(errObj)) {\n reject(new SubmissionError(errObj));\n }\n hideSpinner();\n };\n\n const handleWizardFormSubmit = (buttonData) => {\n trackEventWithGlobalData(finishBtnFptiSpec, {\n ...(isSetAmountPage\n ? {\n amount_type: amountType,\n choose_program: listPrograms === 'yes' ? 'on' : 'off',\n curr: receiverCurrency,\n fee_type: coverFeesEnabled === 'yes' ? 'offset' : 'none',\n is_recurring: recurringEnabled === 'yes' ? 'on' : 'off',\n step: currentStep,\n }\n : {}),\n ...(isAdvancedSettingsPage\n ? {\n addr_index: noShipping === 'no' ? 'on' : 'off',\n advanced_variables:\n noAdvancedVariables === 'no' && !_isEmpty(extraVariablesView)\n ? 'yes'\n : 'no',\n is_allow_note: noNote === 'no' ? 'yes' : 'no',\n redirect_to_url:\n noCancelReturn === 'no' &&\n (!_isEmpty(cancelReturn) || !_isEmpty(returnUrl))\n ? 'yes'\n : 'no',\n step: currentStep,\n }\n : {}),\n });\n\n // Clear errors on submit\n showSpinner();\n\n if (isDuplicating) {\n delete buttonData.id;\n } else if (isEditing) {\n buttonData.id = buttonFactoryV3.button?.id;\n }\n\n return new Promise((resolve, reject) => {\n saveButton(buttonData)\n .then((response) => {\n if (!response.ok) {\n saveButtonErrorHandler(response, reject);\n } else {\n const buttonId = _get(response, 'button.id');\n if (!_isEmpty(buttonId)) {\n setCurrentStep(1);\n history.push(`/donate/buttons/manage/${buttonId}`);\n const coverFees =\n getButtonVariable(\n _get(response, 'button'),\n 'donor_covers_fees'\n ) === 'true';\n\n trackWizardDetailsPage({\n button_id: buttonId,\n hosted_button_id: buttonId,\n fee_payer: coverFees ? 'variable' : 'merchant',\n });\n } else {\n const receiverCountry = _get(\n response,\n 'data.clientData.userData.legalCountry'\n );\n trackWizardDetailsPage({\n rcvrcntry: receiverCountry,\n });\n setCurrentStep(1);\n history.push('/donate/buttons/manage/unhosted');\n }\n // destroy form\n // We use `destroyOnUnmount: false` which causes redux-form to save values\n // after unmount. So, manually destroy the form to clear values\n destroyForm();\n }\n })\n .catch((error) => {\n saveButtonErrorHandler(error, reject);\n });\n });\n };\n\n const handleImageUpload = async () => {\n trackEventWithData(FPTI_SPEC.UPLOAD_BUTTON_IMAGE_SAVE_CL);\n return new Promise((resolve, reject) => {\n uploadImage(buttonImageUrl)\n .then((response) => {\n if (response.ok) {\n return resolve(response);\n }\n\n let error = {\n processingStage: 'IMAGE_UPLOAD_ERROR',\n response,\n };\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_UPLOAD_ERROR',\n error_desc: 'button_image_url',\n error_detail: JSON.stringify(response),\n screen: SCREEN.EXPERIENCE_SETUP,\n step: currentStep,\n });\n return reject(error);\n })\n .catch((error) => {\n trackEventWithData(FPTI_SPEC.FIELD_LEVEL_ERROR_IM, {\n error_code: 'IMAGE_UPLOAD_ERROR',\n error_desc: 'button_image_url',\n error_detail: JSON.stringify(error),\n screen: SCREEN.EXPERIENCE_SETUP,\n step: currentStep,\n });\n return reject({ ...error, processingStage: 'IMAGE_UPLOAD_ERROR' });\n });\n });\n };\n\n // Image upload Experience\n const buttonDropzoneSubmit = async () => {\n setDropzoneError('');\n if (usePaypalButtonStyle === 'no') {\n if (!_isEmpty(buttonImageUrl)) {\n const isPayPalImage = shouldUsePayPalButtonStyle({\n button_image_url: buttonImageUrl,\n });\n\n if (isPayPalImage === 'yes') {\n setDropzoneError(errors.dropzone.tryAgain);\n } else if (imageUpdated && isPayPalImage === 'no') {\n try {\n setShowButtonSpinner(true);\n let response = await handleImageUpload();\n if (response.success) {\n dispatch(\n change(BTN_FACTORY_V3_FORM, 'buttonImageUrl', response.src)\n );\n setImageUpdated(false);\n handleContinueClick();\n } else {\n setDropzoneError(errors.dropzone.tryAgain);\n }\n setShowButtonSpinner(false);\n } catch (e) {\n setShowButtonSpinner(false);\n setDropzoneError(errors.dropzone.tryAgain);\n }\n } else if (_isEmpty(buttonImageUrl)) {\n setDropzoneError(errors.dropzone.tryAgain);\n } else {\n handleContinueClick();\n }\n } else {\n setDropzoneError(errors.dropzone.tryAgain);\n }\n } else {\n handleContinueClick();\n }\n };\n\n const handleBannerAndLogoErrorCheck = () => {\n const logoError =\n noLogoImage === 'no' &&\n ((formValues.logoTarget === LOGO_TARGET_BUTTON &&\n _isEmpty(formValues.logoUrl)) ||\n (formValues.logoTarget === LOGO_TARGET_PROFILE &&\n _isEmpty(formValues.businessProfileLogoUrl)) ||\n formValues.logoTarget === LOGO_TARGET_NOLOGO);\n const bannerError = noBannerImage === 'no' && _isEmpty(bannerImageUrl);\n setLogoClientError('');\n setBannerClientError('');\n if (logoError || bannerError) {\n if (logoError) {\n setLogoClientError(errors.logo.missingLogo);\n }\n if (bannerError) {\n setBannerClientError(errors.image.missingImage);\n }\n return false;\n }\n\n return true;\n };\n\n const handleContinueFinishButton = () => {\n if (currentStep === 1) {\n if (isDonateLink()) {\n const res = handleBannerAndLogoErrorCheck();\n if (res) {\n handleContinueClick();\n }\n } else {\n buttonDropzoneSubmit();\n }\n } else if (currentStep === 2 && isHostedFlow()) {\n const res = handleBannerAndLogoErrorCheck();\n if (res) {\n handleContinueClick();\n }\n } else {\n handleContinueClick();\n }\n };\n\n const renderWizardStep = () => {\n switch (currentStep) {\n case 1:\n return (\n \n );\n\n case 2:\n return (\n \n );\n\n case 3:\n return (\n \n );\n\n case 4:\n return (\n \n );\n\n default:\n return null;\n }\n };\n\n const renderPreview = () => {\n if (currentStep === 1 && isDonateButton()) {\n return (\n \n );\n }\n\n return (\n \n );\n };\n\n const closeActionableErrorModal = () => {\n trackEventWithData(FPTI_SPEC.ACTIONABLE_ERROR_MODAL_REVIEW_CL, {\n step: currentStep,\n error_code: errorCode,\n error_desc: errorDesc,\n });\n setShouldShowActionableErrorModal(false);\n setErrorDesc(null);\n setErrorCode(null);\n };\n\n const dismissActionableErrorModal = () => {\n trackEventWithData(FPTI_SPEC.ACTIONABLE_ERROR_MODAL_DISMISS_CL, {\n step: currentStep,\n error_code: errorCode,\n error_desc: errorDesc,\n });\n setShouldShowActionableErrorModal(false);\n setErrorDesc(null);\n setErrorCode(null);\n };\n\n const closeUnactionableErrorModal = () => {\n trackEventWithData(FPTI_SPEC.ERROR_INTERACTION_DISMISS_CL, {\n step: currentStep,\n error_code: errorCode,\n });\n setShouldShowUnactionableErrorModal(false);\n setErrorCode(null);\n };\n\n const handleStartOverFromActionableErrorModal = () => {\n showSpinner();\n trackEventWithData(FPTI_SPEC.ACTIONABLE_ERROR_MODAL_START_OVER_CL, {\n step: currentStep,\n error_code: errorCode,\n error_desc: errorDesc,\n });\n const buttonType = getParameterByName('type');\n window.location.href = !_isEmpty(buttonType)\n ? `/donate/buttons?type=${buttonType}`\n : '/donate/buttons';\n };\n\n const handleStartOverFromUnactionableErrorModal = () => {\n showSpinner();\n trackEventWithData(FPTI_SPEC.ERROR_INTERACTION_LINK_CL, {\n step: currentStep,\n error_code: errorCode,\n link: 'start_over',\n screen,\n });\n const buttonType = getParameterByName('type');\n window.location.href = !_isEmpty(buttonType)\n ? `/donate/buttons?type=${buttonType}`\n : '/donate/buttons';\n };\n\n const handleRetry = () => {\n trackEventWithData(FPTI_SPEC.ERROR_INTERACTION_LINK_CL, {\n step: currentStep,\n error_code: errorCode,\n link: 'try_again',\n screen,\n });\n dispatch(submit(BTN_FACTORY_V3_FORM));\n };\n\n const renderActionableErrorModal = () => {\n const fptiSpec = {\n impression: FPTI_SPEC.ACTIONABLE_ERROR_MODAL_IM,\n data: {\n step: currentStep,\n error_code: errorCode,\n error_desc: errorDesc,\n },\n };\n\n return (\n \n );\n };\n\n const renderUnactionableErrorModal = () => {\n const fptiSpec = {\n impression: FPTI_SPEC.ERROR_INTERACTION_IM,\n data: {\n step: currentStep,\n error_code: errorCode,\n flow: isButtonFlow ? 'button' : 'link',\n screen,\n },\n };\n\n return (\n \n );\n };\n\n const stepsString = stepCount\n .replace(new RegExp('{currentStep}'), currentStep)\n .replace(new RegExp('{totalSteps}'), totalSteps);\n\n const duplicateToast = (\n \n );\n\n if (!isLoggedInUser()) {\n return (\n \n );\n }\n\n if (isCountryNotSupported) {\n return ;\n }\n\n const previewHeader = isButtonConfigurePage\n ? previewContainerHeader\n : previewTitle;\n\n const previewButtonLabel = isButtonConfigurePage\n ? previewButton\n : previewDonatePage;\n\n return (\n <>\n {shouldShowDuplicateToast && duplicateToast}\n \n \n \n {!buttonFactoryV3.isMobile ? (\n <>\n
\n {isHostedFlow() && (\n \n {backFundraisers}\n \n )}\n
\n \n \n ) : (\n <>\n \n \n \n )}\n
\n\n \n \n \n {!busy && renderWizardStep()}\n \n\n {!buttonFactoryV3.isMobile ? (\n \n {renderPreview()}\n \n ) : null}\n \n {buttonFactoryV3.isMobile ? (\n dispatch(submit(BTN_FACTORY_V3_FORM))}\n openMobilePreview={openMobilePreview}\n isMobilePreviewOpen={buttonFactoryV3.isMobilePreviewOpen}\n closeMobilePreview={closeMobilePreview}\n steps={{ currentStep, totalSteps }}\n labels={{\n continueButton,\n finishButton,\n previewButton: previewButtonLabel,\n previewTitle: previewHeader,\n }}\n usePaypalButtonStyle={usePaypalButtonStyle === 'yes'}\n buttonSize={buttonSize}\n showAcceptedCardLogos={!!showAcceptedCardLogos}\n buttonImageUrl={buttonImageUrl}\n onError={handleButtonPreviewError}\n locale={getLanguage()}\n country={countryCode}\n showSpinner={showButtonSpinner}\n buttonDropzoneSubmit={buttonDropzoneSubmit}\n handleBannerAndLogoErrorCheck={handleBannerAndLogoErrorCheck}\n />\n ) : null}\n \n\n {renderActionableErrorModal()}\n {renderUnactionableErrorModal()}\n {renderQuitModal()}\n \n );\n};\n\nButtonFactoryWizardV3.propTypes = {\n application: PropTypes.object,\n buttonFactoryV3: PropTypes.object,\n destroyForm: PropTypes.func,\n dispatch: PropTypes.func,\n form: PropTypes.object,\n getButton: PropTypes.func,\n goToNextStep: PropTypes.func,\n goToPreviousStep: PropTypes.func,\n hideActionableErroModal: PropTypes.func,\n hideUnactionableErrorModal: PropTypes.func,\n history: PropTypes.object,\n initializeWizard: PropTypes.func,\n location: PropTypes.object,\n match: PropTypes.object,\n saveButton: PropTypes.func,\n uploadImage: PropTypes.func,\n updateBusinessProfileLogo: PropTypes.func,\n updateBusinessImageUrls: PropTypes.func,\n updateFlowSpec: PropTypes.func,\n setCurrentStep: PropTypes.func,\n showActionableErrorModal: PropTypes.func,\n showUnactionableErrorModal: PropTypes.func,\n openMobilePreview: PropTypes.func,\n closeMobilePreview: PropTypes.func,\n updateIsMobile: PropTypes.func,\n optionsForLanguage: PropTypes.array,\n};\n\nconst mapStateToProps = (state) => {\n const { application = {}, buttonFactoryV3 = {}, form = {} } = state;\n const formValues = form.buttonFactoryV3?.values;\n const countryAndLanguageDetails = _get(\n state,\n 'application.countryAndLanguageDetails'\n );\n const countryCode =\n _get(formValues, 'countryCode') ||\n _get(state.buttonFactory, 'formattedButton.countryCode');\n return {\n application,\n buttonFactoryV3,\n form,\n optionsForLanguage: getOptionsForLanguageField(\n countryAndLanguageDetails,\n countryCode\n ),\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { ...bindActionCreators(ButtonFactoryActions, dispatch), dispatch };\n};\n\nconst ButtonFactoryWizardFormV3 = connect(\n mapStateToProps,\n mapDispatchToProps\n)(ButtonFactoryWizardV3);\nexport default withRouter(ButtonFactoryWizardFormV3);\n","import '../routes/publicPath';\n\nimport 'consumerweb-shim';\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport React, { Suspense } from 'react';\nimport { Route, Switch, Router } from 'react-router-dom';\nimport history from '../routes/configureHistory';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport getStore from '../buttons/store/configureStore';\nimport '../utility/csrf';\nimport Spinner from './spinner/Spinner';\nimport { setContainerMarginsBefore } from '../buttons/utils/headerUtils';\nimport { reactLazyPreload } from '../utility/lazyLoader';\nimport { lazy as reactLazy } from 'react';\nimport FallbackSpinner from './common/FallbackSpinner';\nimport ButtonFactoryWizardV3 from '../buttons/componentsV3/ButtonFactoryWizardV3';\nimport '../../css/ppvx-buttonFactory.less';\n\nsetContainerMarginsBefore();\nconst store = getStore();\n\nconst MarketingHeader = reactLazy(() =>\n import(\n /* webpackChunkName: \"MarketingHeader\" */ './marketingHeader/MarketingHeader'\n )\n);\n\nconst PartnerButtonsV3 = reactLazyPreload(() =>\n import(\n /* webpackChunkName: \"PartnerButtonsV3\" */ '../buttons/componentsV3/partner/partnerButtons'\n )\n);\n\nconst PartnerTermsMerchantV3 = reactLazyPreload(() =>\n import(\n /* webpackChunkName: \"PartnerTermsMerchantV3\" */ '../buttons/componentsV3/partner/partnerTermsMerchant'\n )\n);\n\nconst ButtonOverviewV3 = reactLazyPreload(() =>\n import(\n /* webpackChunkName: \"ButtonOverviewV3\" */ '../buttons/componentsV3/buttonManager/buttonOverview/buttonOverview'\n )\n);\n\nconst ButtonManagerV3 = reactLazyPreload(() =>\n import(\n /* webpackChunkName: \"ButtonManagerV3\" */ '../buttons/componentsV3/buttonManager/buttonManager'\n )\n);\n\nconst PartnerTermsCustomerV3 = reactLazyPreload(() =>\n import(\n /* webpackChunkName: \"PartnerTermsCustomerV3\" */ '../buttons/componentsV3/partner/partnerTermsCustomer'\n )\n);\n\nconst App = () => {\n return (\n
\n \n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n};\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('react-buttons-container')\n);\n\nif (document.getElementById('marketing-header-container')) {\n ReactDOM.render(\n \n \n }>\n
\n \n
\n
\n
\n
,\n document.getElementById('marketing-header-container')\n );\n}\n\nReactDOM.render(\n \n \n
\n \n
\n
\n
,\n document.getElementById('button-factory-spinner')\n);\n","import { isLoggedInUser } from '../utils/authUtils';\nimport {\n getEncryptedAccountNum,\n getSavedButtonsCount,\n getUserType,\n isDonateButton,\n isHostedFlow,\n} from '../utils/buttonFactoryUtils';\n\nconst count = getSavedButtonsCount();\nconst state = count > 1 ? 'populated' : 'empty';\nconst isHosted = isHostedFlow();\n\nconst PAGE_SPEC = {\n LANDING_PAGE: {\n pgrp: 'main:wps:donate:landing:login',\n page: 'main:wps:donate:landing:login',\n },\n MANAGE_PAGE: {\n pgrp: 'main:wps:donate:button_manager',\n page: 'main:wps:donate:button_manager',\n },\n OVERVIEW_PAGE: {\n pgrp: 'main:wps:donate:button_overview',\n page: 'main:wps:donate:button_overview',\n },\n WIZARD_STEP_ONE_HOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:hosted:1',\n page: 'main:wps:donate:button:setup:wizard:hosted:1',\n },\n WIZARD_STEP_TWO_HOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:hosted:2',\n page: 'main:wps:donate:button:setup:wizard:hosted:2',\n },\n WIZARD_STEP_THREE_HOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:hosted:3',\n page: 'main:wps:donate:button:setup:wizard:hosted:3',\n },\n WIZARD_STEP_FOUR_HOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:hosted:4',\n page: 'main:wps:donate:button:setup:wizard:hosted:4',\n },\n WIZARD_STEP_ONE_UNHOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:unhosted:1',\n page: 'main:wps:donate:button:setup:wizard:unhosted:1',\n },\n WIZARD_STEP_TWO_UNHOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:unhosted:2',\n page: 'main:wps:donate:button:setup:wizard:unhosted:2',\n },\n WIZARD_STEP_THREE_UNHOSTED_PAGE: {\n pgrp: 'main:wps:donate:button:setup:wizard:unhosted:3',\n page: 'main:wps:donate:button:setup:wizard:unhosted:3',\n },\n};\n\nconst DEFAULT_FPTI_DATA = {\n component: 'donatenodeweb',\n product: 'donate',\n account_type: getUserType(),\n encr_cust_id: getEncryptedAccountNum(), // check if this is generated automatically\n isLoggedIn: isLoggedInUser(),\n ...window?.fpti,\n};\n\nconst SAVED_BUTTONS_DATA = {\n count,\n state,\n};\n\nconst LANDING_PAGE_DEFAULT_DATA = {\n ...DEFAULT_FPTI_DATA,\n ...PAGE_SPEC.LANDING_PAGE,\n};\n\nconst MANAGE_PAGE_DEFAULT_DATA = {\n ...SAVED_BUTTONS_DATA,\n ...DEFAULT_FPTI_DATA,\n ...PAGE_SPEC.MANAGE_PAGE,\n};\n\nconst FLOW = {\n flow: isDonateButton() ? 'button' : 'link',\n};\n\nconst CONFIGURE_BUTTON_PAGE_DEFAULT_DATA = {\n step: 1,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n ...(isHosted\n ? { ...PAGE_SPEC.WIZARD_STEP_ONE_HOSTED_PAGE }\n : { ...PAGE_SPEC.WIZARD_STEP_ONE_UNHOSTED_PAGE }),\n};\n\nconst EXPERIENCE_SETUP_PAGE_DEFAULT_DATA = {\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n ...(isHosted\n ? { ...PAGE_SPEC.WIZARD_STEP_TWO_HOSTED_PAGE }\n : { ...PAGE_SPEC.WIZARD_STEP_TWO_UNHOSTED_PAGE }),\n};\n\nconst SET_AMOUNT_PAGE_DEFAULT_DATA = {\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n ...(isHosted\n ? { ...PAGE_SPEC.WIZARD_STEP_THREE_HOSTED_PAGE }\n : { ...PAGE_SPEC.WIZARD_STEP_THREE_UNHOSTED_PAGE }),\n};\n\nconst ADVANCED_SETTINGS_PAGE_DEFAULT_DATA = {\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n ...(isHosted\n ? { ...PAGE_SPEC.WIZARD_STEP_FOUR_HOSTED_PAGE }\n : { ...PAGE_SPEC.WIZARD_STEP_FOUR_UNHOSTED_PAGE }),\n};\n\nconst OVERVIEW_PAGE_DEFAULT_DATA = {\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n ...PAGE_SPEC.OVERVIEW_PAGE,\n};\n\nconst CLICK = {\n e: 'cl',\n};\n\nconst IMPRESSION = {\n e: 'im',\n};\n\nconst ERROR = {\n e: 'err',\n};\n\nconst ACTIVITY = {\n e: 'ac',\n};\n\nexport const FPTI_SPEC = {\n LANDING_PAGE_IM: {\n event_name: 'donate_setup_intro_screen_shown',\n data: {\n ...IMPRESSION,\n ...LANDING_PAGE_DEFAULT_DATA,\n },\n },\n LANDING_PAGE_LOGIN_CL: {\n event_name: 'donate_setup_intro_login_pressed',\n data: {\n ...CLICK,\n ...LANDING_PAGE_DEFAULT_DATA,\n },\n },\n LANDING_PAGE_SIGNUP_CL: {\n event_name: 'donate_setup_intro_sign_up_pressed',\n data: {\n ...CLICK,\n ...LANDING_PAGE_DEFAULT_DATA,\n },\n },\n LANDING_PAGE_HEADER_LOGIN_CL: {\n event_name: 'donate_setup_intro_header_login_pressed',\n data: {\n ...CLICK,\n ...LANDING_PAGE_DEFAULT_DATA,\n },\n },\n LANDING_PAGE_HEADER_SIGNUP_CL: {\n event_name: 'donate_setup_intro_header_sign_up_pressed',\n data: {\n ...CLICK,\n ...LANDING_PAGE_DEFAULT_DATA,\n },\n },\n MANAGE_PAGE_IM: {\n event_name: 'donate_setup_manage_screen_shown',\n data: {\n ...IMPRESSION,\n ...MANAGE_PAGE_DEFAULT_DATA,\n },\n },\n MANAGE_PAGE_CREATE_LINK_CL: {\n event_name: 'donate_setup_manage_create_link_pressed',\n data: {\n ...CLICK,\n ...MANAGE_PAGE_DEFAULT_DATA,\n },\n },\n MANAGE_PAGE_CREATE_BUTTON_CL: {\n event_name: 'donate_setup_manage_create_button_pressed',\n data: {\n ...CLICK,\n ...MANAGE_PAGE_DEFAULT_DATA,\n },\n },\n MANAGE_PAGE_MANAGE_BUTTON_CL: {\n event_name: 'donate_setup_manage_saved_button_pressed',\n data: {\n ...CLICK,\n ...MANAGE_PAGE_DEFAULT_DATA,\n },\n },\n MANAGE_PAGE_FEEDBACK_BUTTON_CL: {\n event_name: 'donate_setup_manage_feedback_pressed',\n data: {\n ...CLICK,\n ...MANAGE_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_IM: {\n event_name: 'donate_setup_configure_button_screen_shown',\n data: {\n ...IMPRESSION,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_CONTINUE_CL: {\n event_name: 'donate_setup_configure_button_continue_pressed',\n data: {\n ...CLICK,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_CANCEL_CL: {\n event_name: 'donate_setup_configure_button_cancel_pressed',\n data: {\n ...CLICK,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_NAV_BACK_CL: {\n event_name: 'donate_setup_configure_button_nav_back_pressed',\n data: {\n ...CLICK,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_FEEDBACK_CL: {\n event_name: 'donate_setup_configure_button_feedback_pressed',\n data: {\n ...CLICK,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_CHANGE_LOGO_CL: {\n event_name: 'donate_setup_configure_button_update_image_pressed',\n data: {\n ...CLICK,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n CONFIGURE_BUTTON_PAGE_LOGO_UPDATED: {\n event_name: 'donate_setup_configure_button_image_updated',\n data: {\n ...ACTIVITY,\n ...CONFIGURE_BUTTON_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_IM: {\n event_name: 'donate_setup_experience_setup_screen_shown',\n data: {\n ...IMPRESSION,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_CANCEL_CL: {\n event_name: 'donate_setup_experience_setup_cancel_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_CONTINUE_CL: {\n event_name: 'donate_setup_experience_setup_continue_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_BACK_CL: {\n event_name: 'donate_setup_experience_setup_back_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_NAV_BACK_CL: {\n event_name: 'donate_setup_experience_setup_nav_back_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_FEEDBACK_CL: {\n event_name: 'donate_setup_experience_setup_feedback_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_PREVIEW_TAB_CL: {\n event_name: 'donate_setup_experience_setup_tab_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_UPLOAD_LOGO_CL: {\n event_name: 'donate_setup_experience_upload_logo_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_LOGO_MODAL_IM: {\n event_name: 'donate_setup_upload_logo_screen_shown',\n data: {\n ...IMPRESSION,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_BUTTON_IMAGE_SAVE_CL: {\n event_name: 'donate_setup_upload_button_image_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_LOGO_MODAL_SAVE_CL: {\n event_name: 'donate_setup_upload_logo_save_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_LOGO_MODAL_IMAGE_UPDATED: {\n event_name: 'donate_setup_upload_logo_image_updated',\n data: {\n ...ACTIVITY,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_LOGO_MODAL_CHECKBOX_CL: {\n event_name: 'donate_setup_upload_logo_checkbox_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_LOGO_MODAL_DISMISS_CL: {\n event_name: 'donate_setup_upload_logo_dismiss_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n EXPERIENCE_SETUP_PAGE_UPLOAD_BACKGOURND_IMG_CL: {\n event_name: 'donate_setup_experience_upload_img_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_BACKGOURND_IMG_MODAL_IM: {\n event_name: 'donate_setup_upload_img_screen_shown',\n data: {\n ...IMPRESSION,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_BACKGOURND_IMG_MODAL_SAVE_CL: {\n event_name: 'donate_setup_upload_img_save_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_BACKGOURND_IMG_MODAL_IMAGE_UPDATED: {\n event_name: 'donate_setup_upload_img_img_updated',\n data: {\n ...ACTIVITY,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n UPLOAD_BACKGOURND_IMG_MODAL_DISMISS_CL: {\n event_name: 'donate_setup_upload_img_dismiss_pressed',\n data: {\n ...CLICK,\n ...EXPERIENCE_SETUP_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_IM: {\n event_name: 'donate_setup_set_amount_screen_shown',\n data: {\n ...IMPRESSION,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_CONTINUE_CL: {\n event_name: 'donate_setup_set_amount_continue_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_FINISH_CL: {\n event_name: 'donate_setup_set_amount_finish_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_BACK_CL: {\n event_name: 'donate_setup_set_amount_back_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_NAV_BACK_CL: {\n event_name: 'donate_setup_set_amount_nav_back_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_FEEDBACK_CL: {\n event_name: 'donate_setup_set_amount_feedback_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n SET_AMOUNT_PAGE_PREVIEW_TAB_CL: {\n event_name: 'donate_setup_set_amount_tab_pressed',\n data: {\n ...CLICK,\n ...SET_AMOUNT_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_IM: {\n event_name: 'donate_setup_advanced_settings_screen_shown',\n data: {\n ...IMPRESSION,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_FINISH_CL: {\n event_name: 'donate_setup_advanced_settings_finish_pressed',\n data: {\n ...CLICK,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_BACK_CL: {\n event_name: 'donate_setup_advanced_settings_back_pressed',\n data: {\n ...CLICK,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_NAV_BACK_CL: {\n event_name: 'donate_setup_advanced_settings_nav_back_pressed',\n data: {\n ...CLICK,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_FEEDBACK_CL: {\n event_name: 'donate_setup_advanced_settings_feedback_pressed',\n data: {\n ...CLICK,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n ADVANCED_SETTINGS_PAGE_PREVIEW_TAB_CL: {\n event_name: 'donate_setup_advanced_settings_tab_pressed',\n data: {\n ...CLICK,\n ...ADVANCED_SETTINGS_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_IM: {\n event_name: 'donate_setup_success_screen_shown',\n data: {\n ...IMPRESSION,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_SUCCESS_BANNER_IM: {\n event_name: 'donate_setup_success_banner_shown',\n data: {\n ...IMPRESSION,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_SUCCESS_BANNER_SAVED_BUTTON_CL: {\n event_name: 'donate_setup_success_banner_donation_page_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_SUCCESS_BANNER_DISMISS_CL: {\n event_name: 'donate_setup_success_banner_closed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_BACK_CL: {\n event_name: 'donate_setup_success_back_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_EDIT_NAME_CL: {\n event_name: 'donate_setup_success_edit_name_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_SAVE_NAME_CL: {\n event_name: 'PLACEHOLDER_donate_setup_success_save_name_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_EDIT_CL: {\n event_name: 'donate_setup_success_edit_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_PREVIEW_CL: {\n event_name: 'donate_setup_success_preview_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_PREVIEW_DISMISS_CL: {\n event_name: 'donate_setup_success_preview_dismiss_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_DUPLICATE_CL: {\n event_name: 'donate_setup_success_duplicate_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_DELETE_CL: {\n event_name: 'donate_setup_success_delete_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_SHARE_CL: {\n event_name: 'donate_setup_success_share_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_COPY_LINK_CL: {\n event_name: 'donate_setup_success_copy_link_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_COPY_BUTTON_CL: {\n event_name: 'donate_setup_success_copy_button_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_DOWNLOAD_QRC_CL: {\n event_name: 'donate_setup_success_download_qrc_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n OVERVIEW_PAGE_FEEDBACK_CL: {\n event_name: 'donate_setup_success_feedback_pressed',\n data: {\n ...CLICK,\n ...OVERVIEW_PAGE_DEFAULT_DATA,\n },\n },\n PRODUCT_UPDATE_EXPERIENCE_MODAL_IM: {\n event_name: 'donate_setup_feature_education_screen_shown',\n data: {\n ...IMPRESSION,\n ...DEFAULT_FPTI_DATA,\n },\n },\n PRODUCT_UPDATE_EXPERIENCE_MODAL_SIDE_SCROLL_CL: {\n event_name: 'donate_setup_feature_education_side_scroll_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n },\n },\n PRODUCT_UPDATE_EXPERIENCE_MODAL_DISMISS_CL: {\n event_name: 'donate_setup_feature_education_dismiss_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n },\n },\n ACTIONABLE_ERROR_MODAL_IM: {\n event_name: 'donate_setup_actionable_error_modal_shown',\n data: {\n ...ERROR,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ACTIONABLE_ERROR_MODAL_REVIEW_CL: {\n event_name: 'donate_setup_actionable_error_edit_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ACTIONABLE_ERROR_MODAL_START_OVER_CL: {\n event_name: 'donate_setup_actionable_error_start_over_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ACTIONABLE_ERROR_MODAL_DISMISS_CL: {\n event_name: 'donate_setup_actionable_error_dismiss_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n FIELD_LEVEL_ERROR_IM: {\n event_name: 'donate_setup_input_validation_error_occurred',\n data: {\n ...ERROR,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ERROR_INTERACTION_IM: {\n event_name: 'donate_setup_failed_customer_interaction_occurred',\n data: {\n ...ERROR,\n ...DEFAULT_FPTI_DATA,\n },\n },\n ERROR_INTERACTION_LINK_CL: {\n event_name: 'donate_setup_failed_customer_interaction_link_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n },\n },\n ERROR_INTERACTION_DISMISS_CL: {\n event_name: 'donate_setup_failed_customer_interaction_dismiss_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n },\n },\n ALERT_MODAL_IM: {\n event_name: 'donate_setup_action_alert_modal_shown',\n data: {\n ...ERROR,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ALERT_MODAL_CONFIRM_CL: {\n event_name: 'donate_setup_action_alert_confirm_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ALERT_MODAL_CANCEL_CL: {\n event_name: 'donate_setup_action_alert_cancel_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n ALERT_MODAL_DISMISS_CL: {\n event_name: 'donate_setup_action_alert_dismiss_pressed',\n data: {\n ...CLICK,\n ...DEFAULT_FPTI_DATA,\n ...FLOW,\n },\n },\n};\n\nexport const ACTION = {\n EXTEND_SESSION: 'extend session',\n QUIT: 'quit creating donation page',\n DELETE: 'delete donation page',\n};\n\nexport const SCREEN = {\n CONFIGURE_BUTTON: 'configure_button',\n EXPERIENCE_SETUP: 'experience_setup',\n SET_AMOUNT: 'set_amount',\n ADVANCED_SETTINGS: 'advanced_settings',\n MANAGE: 'manage',\n SUCCESS: 'success',\n};\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport rootReducer from '../reducers';\n\nlet middlewares = [thunkMiddleware];\n\nif (process && process.env && process.env.NODE_ENV !== 'production') {\n const skipActionTypesList = [\n '@@redux-form/REGISTER_FIELD',\n '@@redux-form/UNREGISTER_FIELD',\n '@@redux-form/TOUCH',\n '@@redux-form/FOCUS',\n '@@redux-form/BLUR',\n ];\n const createLogger = require('redux-logger').createLogger;\n const logger = createLogger({\n collapsed: true,\n predicate: (getState, action) =>\n skipActionTypesList.indexOf(action.type) === -1,\n });\n\n middlewares.push(logger);\n}\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n trace: true,\n traceLimit: 25,\n })\n : compose;\n\nfunction configureStore(initialState) {\n const store = createStore(\n rootReducer,\n composeEnhancers(applyMiddleware(...middlewares))\n );\n\n if (module.hot) {\n // Enable Webpack hot module replacement for reducers\n module.hot.accept('../reducers', () => {\n const nextRootReducer = require('../reducers');\n store.replaceReducer(nextRootReducer);\n });\n }\n\n return store;\n}\n\nlet reduxStore;\nexport default function getStore(initialState) {\n if (!reduxStore) {\n reduxStore = configureStore(initialState);\n }\n\n return reduxStore;\n}\n","import React from 'react';\nimport { IconButton } from '@paypalcorp/pp-react';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { Field, change, getFormValues } from 'redux-form';\nimport { BTN_FACTORY_V3_FORM } from '../../clientConstants';\nimport BasicInputField from '../fields/BasicInputField';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nconst {\n removeButton,\n upArrow,\n downArrow,\n programNameDefaultField,\n programName,\n} = getLocaleMessages('buttonsV3/programs');\n\nconst ProgramFieldV3 = ({\n position,\n showUpArrow,\n showDownArrow,\n showDelete,\n programNames,\n dispatch,\n}) => {\n const renderTextField = (props) => {\n return ;\n };\n\n const onChangeProgram = (value) => {\n programNames[position] = value;\n const newProgramNames = [...programNames];\n change(BTN_FACTORY_V3_FORM, 'programNames', newProgramNames);\n };\n\n const moveProgramUp = () => {\n let newProgramNames = [...programNames];\n const tempProgram = newProgramNames[position];\n\n newProgramNames[position] = newProgramNames[position - 1];\n newProgramNames[position - 1] = tempProgram;\n\n dispatch(change(BTN_FACTORY_V3_FORM, 'programNames', newProgramNames));\n\n dispatch(\n change(\n BTN_FACTORY_V3_FORM,\n ['programInput', position].join(''),\n newProgramNames[position]\n )\n );\n dispatch(\n change(\n BTN_FACTORY_V3_FORM,\n ['programInput', position - 1].join(''),\n newProgramNames[position - 1]\n )\n );\n };\n\n const moveProgramDown = () => {\n let newProgramNames = [...programNames];\n const tempProgram = newProgramNames[position];\n\n newProgramNames[position] = newProgramNames[position + 1];\n newProgramNames[position + 1] = tempProgram;\n\n dispatch(change(BTN_FACTORY_V3_FORM, 'programNames', newProgramNames));\n\n dispatch(\n change(\n BTN_FACTORY_V3_FORM,\n ['programInput', position].join(''),\n newProgramNames[position]\n )\n );\n dispatch(\n change(\n BTN_FACTORY_V3_FORM,\n ['programInput', position + 1].join(''),\n newProgramNames[position + 1]\n )\n );\n };\n\n const removeProgram = () => {\n const newProgramNames = [];\n for (let i = 0; i < programNames.length; i++) {\n if (i !== position) {\n newProgramNames.push(programNames[i]);\n }\n if (i === programNames.length - 1) {\n dispatch(change(BTN_FACTORY_V3_FORM, ['programInput', i].join(''), ''));\n }\n }\n\n for (let i = 0; i < newProgramNames.length; i++) {\n dispatch(\n change(\n BTN_FACTORY_V3_FORM,\n ['programInput', i].join(''),\n newProgramNames[i]\n )\n );\n }\n\n dispatch(change(BTN_FACTORY_V3_FORM, 'programNames', newProgramNames));\n };\n\n return (\n
\n onChangeProgram(e.target.value)}\n onBlur={(e) => onChangeProgram(e.target.value)}\n component={renderTextField}\n />\n
\n \n {upArrow}\n \n \n {downArrow}\n \n \n {removeButton}\n \n
\n
\n );\n};\n\nProgramFieldV3.propTypes = {\n position: PropTypes.number,\n showUpArrow: PropTypes.bool,\n showDownArrow: PropTypes.bool,\n showDelete: PropTypes.bool,\n programNames: PropTypes.array,\n dispatch: PropTypes.func,\n};\n\nconst mapStateToProps = (state) => {\n const formValues = getFormValues(BTN_FACTORY_V3_FORM)(state) || {};\n\n return {\n programNames: formValues.programNames,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { dispatch };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProgramFieldV3);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getFormValues } from 'redux-form';\nimport {\n BTN_FACTORY_V3_FORM,\n BTN_FACTORY_MAX_PROGRAMS,\n} from '../../clientConstants';\nimport ProgramFieldV3 from './ProgramFieldV3';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { checkKeyPressed } from '../../../utility/accessibilityUtils';\nimport { Link, Icon } from '@paypalcorp/pp-react';\n\nconst { addButton } = getLocaleMessages('buttonsV3/programs');\n\nconst AddRemoveProgramsV3 = ({ programNames, addProgram }) => {\n const showUpArrow = (index) => {\n if (programNames.length === 1) {\n return false;\n }\n if (index === 0) {\n return false;\n }\n return true;\n };\n\n const showDownArrow = (index) => {\n if (programNames.length === 1) {\n return false;\n }\n if (index === programNames.length - 1) {\n return false;\n }\n return true;\n };\n\n const handleAddProgramClick = (e) => {\n checkKeyPressed(e, () => {\n addProgram();\n });\n };\n\n return (\n
\n {programNames.map((_, index) => {\n return (\n 1}\n />\n );\n })}\n {programNames.length < BTN_FACTORY_MAX_PROGRAMS && (\n }\n >\n {addButton}\n \n )}\n
\n );\n};\n\nAddRemoveProgramsV3.propTypes = {\n addProgram: PropTypes.func,\n programNames: PropTypes.array,\n};\n\nconst mapStateToProps = (state) => {\n const formValues = getFormValues(BTN_FACTORY_V3_FORM)(state) || {};\n\n return {\n programNames: formValues.programNames,\n };\n};\n\nexport default connect(mapStateToProps)(AddRemoveProgramsV3);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { getFormValues, change } from 'redux-form';\nimport AddRemoveProgramsV3 from './AddRemoveProgramsV3';\nimport {\n BTN_FACTORY_V3_FORM,\n BTN_FACTORY_MAX_PROGRAMS,\n} from '../../clientConstants';\nimport { Field } from 'redux-form';\nimport getLocaleMessages from '../../utils/localesMessages';\nimport { renderSwitchComponent } from '../switchPanels/SwitchPanel';\nimport { LightBulbIcon } from '@paypalcorp/pp-react-icons';\n\nconst {\n chooseSpecificPrograms,\n tooltip = {},\n programs = {},\n} = getLocaleMessages('buttonsV3/programs');\n\nconst ProgramsV3 = ({ listPrograms, programNames, dispatch }) => {\n const addProgram = () => {\n if (programNames.length < BTN_FACTORY_MAX_PROGRAMS) {\n const newProgramNames = [...programNames, ''];\n dispatch(change(BTN_FACTORY_V3_FORM, 'programNames', newProgramNames));\n }\n };\n\n const togglePrograms = () => {\n // This method is now run via the onChange prop, which runs before the value is actually\n // changed in redux-form, thus needing to show the program when the value is still 'no'\n if (listPrograms === 'no') {\n if (programNames && programNames.length === 0) {\n addProgram();\n }\n }\n };\n\n const renderSubTitle = () => {\n return listPrograms === 'no' ? (\n
\n
\n \n
\n {programs.tip}\n
\n ) : (\n tooltip.program\n );\n };\n\n return (\n
\n \n\n {listPrograms === 'yes' && (\n
\n \n
\n )}\n
\n );\n};\n\nProgramsV3.propTypes = {\n listPrograms: PropTypes.string,\n programNames: PropTypes.array,\n dispatch: PropTypes.func,\n};\n\nconst mapStateToProps = (state) => {\n const formValues = getFormValues(BTN_FACTORY_V3_FORM)(state) || {};\n return {\n listPrograms: formValues.listPrograms,\n programNames: formValues.programNames,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return { dispatch };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProgramsV3);\n","const keyMirror = require('keymirror');\n\nmodule.exports = {\n CHANGE_AMOUNT: 'CHANGE_AMOUNT',\n CHANGE_SYMBOL: 'CHANGE_SYMBOL',\n CHANGE_CODE: 'CHANGE_CODE',\n CHANGE_RECURRING: 'CHANGE_RECURRING',\n CHANGE_COVER_FEE: 'CHANGE_COVER_FEE',\n CHANGE_FEE_AMOUNT: 'CHANGE_FEE_AMOUNT',\n CHANGE_FORMATED_FEE_AMOUNT: 'CHANGE_FORMATED_FEE_AMOUNT',\n CHANGE_AMOUNT_BEFORE_FEE: 'CHANGE_AMOUNT_BEFORE_FEE',\n CHANGE_ANONYMOUS_STATUS: 'CHANGE_ANONYMOUS_STATUS',\n RP_MODAL_CLOSED: 'RP_MODAL_CLOSED',\n GIFT_AID_IT: 'GIFT_AID_IT',\n CHANGE_FORMATED_AMOUNT: 'CHANGE_FORMATED_AMOUNT',\n\n CHANGE_NOTE: 'CHANGE_NOTE',\n\n CHANGE_COUNTRY: 'CHANGE_COUNTRY',\n\n CHANGE_CARD_NUMBER: 'CHANGE_CARD_NUMBER',\n CHANGE_EXP_DATE: 'CHANGE_EXP_DATE',\n CHANGE_SECURITY_CODE: 'CHANGE_SECURITY_CODE',\n CHANGE_CARD_SPEC: 'CHANGE_CARD_SPEC',\n\n CHANGE_FIRST_NAME: 'CHANGE_FIRST_NAME',\n CHANGE_LAST_NAME: 'CHANGE_LAST_NAME',\n\n CHANGE_ADDRESS: 'CHANGE_ADDRESS',\n\n CHANGE_PHONE: 'CHANGE_PHONE',\n CHANGE_EMAIL: 'CHANGE_EMAIL',\n\n CHANGE_PASSWORD: 'CHANGE_PASSWORD',\n\n SHOW_LANGUAGE_SELECTOR: 'SHOW_LANGUAGE_SELECTOR',\n\n UPDATE_CONFIRMATION: 'UPDATE_CONFIRMATION',\n\n POST_BACK_DATA: 'POST_BACK_DATA',\n\n UPDATE_CURRENT_PAGE: 'UPDATE_CURRENT_PAGE',\n\n UPDATE_SERVER_ERRORS: 'UPDATE_SERVER_ERRORS',\n\n PAYMENT_ERROR: 'PAYMENT_ERROR',\n\n UPDATE_SIGN_UP_ERROR: 'UPDATE_SIGN_UP_ERROR',\n\n FUNDING_OPTIONS: 'FUNDING_OPTIONS',\n\n EMAIL: 'EMAIL',\n\n BILLING_ADDRESS: 'BILLING_ADDRESS',\n\n UPDATE_DONATION_AMOUNT_TYPE: 'UPDATE_DONATION_AMOUNT_TYPE',\n\n ENABLE_PRESET_AMOUNTS: 'ENABLE_PRESET_AMOUNTS',\n\n CHANGE_SHARE_ADDRESS: 'CHANGE_SHARE_ADDRESS',\n\n ADD_CARD_ERROR: 'ADD_CARD_ERROR',\n\n UPDATE_SELECTED_PROGRAM: 'UPDATE_SELECTED_PROGRAM',\n\n SAVE_FORM_DATA: 'SAVE_FORM_DATA',\n\n UPDATE_THREEDS_DATA: 'UPDATE_THREEDS_DATA',\n\n UPDATE_SELECTED_PRESET_BUTTON_ID: 'UPDATE_SELECTED_PRESET_BUTTON_ID',\n\n UPDATE_ORDER_STATUS: 'UPDATE_ORDER_STATUS',\n\n EMAIL_REX:\n /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\\/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+\\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,\n\n DEFAULT_CARD_SPEC: {\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 DONATE_GIFTAID_IT_EXTRA_AMOUNT: 1.25,\n\n PPGF_DISCLAIMER_TOUCHPOINT: 'Donate_PPGF_Disclaimers_Touchpoint',\n GN_CONTENT_TOUCHPOINT: 'Donate_GN_Content_Touchpoint',\n NNA_CONTENT_TOUCHPOINT: 'Donate_NNA',\n\n PRODUCT: {\n BRANDED_CAMPAIGN: 'BRANDED_CAMPAIGN',\n GENEROSITY_NETWORK: 'GENEROSITY_NETWORK',\n GENEROSITY_NETWORK_CHARITIES: 'GENEROSITY_NETWORK_CHARITIES',\n PP_FUNDRAISING: 'PP_FUNDRAISING',\n },\n\n EVENT_NAME: {\n DW_GIVING_DONATE_SETUP_SCREEN_SHOWN: 'dw_giving_donate_setup_screen_shown',\n DW_GIVING_DONATE_SETUP_COMMENT_PRESSED:\n 'dw_giving_donate_setup_comment_pressed',\n DW_GIVING_DONATE_SETUP_NEXT_PRESSED: 'dw_giving_donate_setup_next_pressed',\n DW_GIVING_DONATE_SETUP_DONATE_WITH_CARD_PRESSED:\n 'dw_giving_donate_setup_card_pressed',\n DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED:\n 'dw_giving_donate_setup_tooltip_pressed',\n DW_GIVING_DONATE_SETUP_TERMS_PRESSED:\n 'dw_giving_donate_setup_terms_pressed',\n DW_GIVING_DONATE_SETUP_DISMISS_PRESSED:\n 'dw_giving_donate_setup_dismiss_pressed',\n DW_GIVING_DONATE_SETUP_SHARE_CONTACT_CHECK_PRESSED:\n 'dw_giving_donate_setup_share_contact_check_pressed',\n DW_GIVING_DONATE_SETUP_SHARE_CONTACT_UNCHECK_PRESSED:\n 'dw_giving_donate_setup_share_contact_uncheck_pressed',\n DW_GIVING_GUEST_FORM_SCREEN_SHOWN: 'dw_giving_guest_form_screen_shown',\n DW_GIVING_GUEST_FORM_DONATE_PRESSED: 'dw_giving_guest_form_donate_pressed',\n DW_GIVING_GUEST_FORM_DISMISS_PRESSED:\n 'dw_giving_guest_form_dismiss_pressed',\n DW_GIVING_MEMBER_REVIEW_DISMISS_PRESSED:\n 'dw_giving_member_review_dismiss_pressed',\n DW_GIVING_PAYMENT_SUCCESS_DISMISS_PRESSED:\n 'dw_giving_payment_success_dismiss_pressed',\n DW_GIVING_PAYMENT_SUCCESS_DONE_PRESSED:\n 'dw_giving_payment_success_done_pressed',\n DW_GIVING_PAYMENT_SUCCESS_SCREEN_SHOWN:\n 'dw_giving_payment_success_screen_shown',\n DW_GIVING_PAYMENT_PENDING_SCREEN_SHOWN:\n 'dw_giving_payment_pending_screen_shown',\n DW_GIVING_PAYMENT_SUCCESS_SHARE_PRESSED:\n 'dw_giving_payment_success_share_pressed',\n DW_GIVING_SHARE_SCREEN_SHOWN: 'dw_giving_share_screen_shown',\n DW_GIVING_SHARE_CHANNEL_PRESSED: 'dw_giving_share_channel_pressed',\n DW_GIVING_SHARE_DISMISS_PRESSED: 'dw_giving_share_dismiss_pressed',\n DW_GIVING_REDIRCT_SCREEN_SHOWN: 'dw_giving_redirct_screen_shown',\n DW_GIVING_REDIRCT_OPEN_PRESSED: 'dw_giving_redirct_open_pressed',\n DW_GIVING_REDIRCT_DISMISS_PRESSED: 'dw_giving_redirct_dismiss_pressed',\n DW_GIVING_FAILED_CUSTOMER_INTERACTION_OCCURRED:\n 'dw_giving_failed_customer_interaction_occurred',\n },\n\n SCREEN_NAME: {\n DW_GIVING_DONATE_SETUP_SCREEN: 'dw_giving_donate_setup_screen',\n DW_GIVING_DONATE_GUEST_FORM_SCREEN: 'dw_giving_donate_guest_form_screen',\n },\n\n FPTI_PRODUCT: 'dw_giving',\n KEY_DOWN: {\n TAB: 9,\n LEFT_ARROW: 37,\n UP_ARROW: 38,\n RIGHT_ARROW: 39,\n DOWN_ARROW: 40,\n SPACE: 32,\n ENTER: 13,\n },\n\n AU_CRS: {\n STATUS: {\n ABORTED: 'ABORTED',\n FAILURE: 'FAILURE',\n SUCCESS: 'SUCCESS',\n },\n ABORTED_STATUS_CODE: ['DOC_UPLOAD_PENDING', 'INFO_NOT_COLLECTED'],\n FAILURE_STATUS_CODE: [\n 'INVALID_REQUEST',\n 'NOT_APPLICABLE',\n 'SERVICE_UNAVAILABLE',\n 'THIRD_PARTY_VERIFICATION_FAIL',\n 'UNAUTHORIZED',\n ],\n SUCCESS_STATUS_CODE: ['COMPLETED', 'VERIFIED'],\n SINGLE_TAX_RESIDENCY: 'tax_inside_legal_country',\n MULTI_TAX_RESIDENCY: 'tax_outside_legal_country',\n },\n ALLOWED_IMAGE_TYPES: [\n 'image/gif',\n 'image/jpg',\n 'image/jpeg',\n 'image/png',\n 'image/bmp',\n ],\n MAX_IMAGE_SIZE: 12582912,\n KILOBYTE: 1024,\n MEGABYTE: 1048576,\n BTN_IMAGE_MAX_FILE_SIZE: 2000000, // 2MB;\n ALLOWED_FILE_EXTENSIONS: ['jpg', 'jpeg', 'gif', 'png', 'bmp', 'tiff', 'tif'],\n IMG_SCALE_SIZE: {\n WIDTH_STEP_1: 300,\n WIDTH_BANNER: 616,\n WIDTH_LOGO: 400,\n },\n INSTRUMENT_TYPES: {\n HOLDING: 'HOLDING',\n PAYMENT_CARD: 'PAYMENT_CARD',\n PAYMENT_TOKEN: 'PAYMENT_TOKEN',\n BANK_ACCOUNT: 'BANK_ACCOUNT',\n CREDIT: 'CREDIT',\n UNKNOWN: 'UNKNOWN',\n },\n PAYMENT_CARDS: keyMirror({\n VISA: null,\n MASTERCARD: null,\n MASTER_CARD: null,\n MAESTRO: null,\n AMEX: null,\n DISCOVER: null,\n JCB: null,\n CHINA_UNION_PAY: null,\n }),\n CDN_HOST_NAME: 'https://www.paypalobjects.com',\n MERCHANT_PPCC_CONFIRMED_STATUS: 'CONFIRMED',\n};\n","import { EVENT_NAME, PRODUCT } from './constants';\nimport TemplateData, { localsMessages } from './getTemplateData';\nimport AppStore from '../stores/AppStore';\nimport { formatCurrencyWithSymbol, normalizeNumber } from './formator';\nimport { getPersonalizedMessages } from './personalizedMessages';\nimport { GN_CONTENT_TOUCHPOINT } from './constants';\nimport { isInContext } from './inContextDonation';\n\nconst gncMessages = localsMessages('clients/generosityNetworkCharities');\n\nexport const isGNC = () =>\n TemplateData.product === PRODUCT.GENEROSITY_NETWORK_CHARITIES;\nexport const isGN = () => TemplateData.product === PRODUCT.GENEROSITY_NETWORK;\nexport const isBrandedCampaign = () =>\n TemplateData.product === PRODUCT.BRANDED_CAMPAIGN;\nexport const isPPFundraising = () =>\n TemplateData.product === PRODUCT.PP_FUNDRAISING;\n\nexport const isCheckoutRail = () => isGNC() || isPPFundraising();\nexport const isSendMoneyRail = () => isGN() || isBrandedCampaign();\n\nexport const isExternalFlow = () =>\n isGNC() || isGN() || isBrandedCampaign() || isPPFundraising();\n\nexport const prepareOrderParams = () => ({\n amount: normalizeNumber(AppStore.getDonationAmount()),\n addressSharingConsent: false,\n currencyCode: AppStore.getDonationCode(),\n currencySymbol: AppStore.getDonationSymbol(),\n donationAmountType:\n AppStore.getDonationAmountType() === 'preset' ? 'preset' : 'userinput',\n donationNote: AppStore.getDonationNote() || '',\n recurring: AppStore.getDonationRecurring(),\n selectedProgram: AppStore.getSelectedProgram(),\n selectedPresetButtonId: AppStore.getSelectedPresetButtonId(),\n token: TemplateData.token,\n anonymousStatus: AppStore.getAnonymousStatus(),\n ppgfMessage: gncMessages?.ppgfMessage,\n directMessage: gncMessages?.directMessage,\n isInContext: isInContext(),\n});\n\nexport const getMaximumDonationAlertMessage = () => {\n const formatedMaximumAmount = formatCurrencyWithSymbol({\n value: TemplateData.maximumDonationAmount,\n currency: TemplateData.maximumDonationCurrency,\n });\n const alertMessage = gncMessages.maximumAmountAlert.replace(\n '{amount}',\n formatedMaximumAmount\n );\n\n return alertMessage;\n};\n\nexport const getPersonalizedNoteToPayeeLabel = () => {\n const psMessages = getPersonalizedMessages(GN_CONTENT_TOUCHPOINT, {\n isHtml: false,\n });\n return psMessages?.noteToPayeeLabel;\n};\n\nexport const getPersonalizedAnonymousContent = () => {\n const psMessages = getPersonalizedMessages(GN_CONTENT_TOUCHPOINT, {\n isHtml: false,\n });\n return {\n label: psMessages?.anonymousLabel,\n tooltip: psMessages?.anonymousTooltip,\n };\n};\n\nexport const getDismissEventName = () => {\n const url = window.location.href;\n\n if (url.includes('confirmation') || url.includes('pending')) {\n return EVENT_NAME.DW_GIVING_PAYMENT_SUCCESS_DISMISS_PRESSED;\n } else if (url.includes('guest')) {\n return EVENT_NAME.DW_GIVING_GUEST_FORM_DISMISS_PRESSED;\n } else if (url.includes('member')) {\n return EVENT_NAME.DW_GIVING_MEMBER_REVIEW_DISMISS_PRESSED;\n }\n return EVENT_NAME.DW_GIVING_DONATE_SETUP_DISMISS_PRESSED;\n};\n"],"sourceRoot":""}