{"version":3,"sources":["resources/ssl.png","resources/credit-cards.png","resources/sc-logo.png","resources/downgrade-guy.png","entities/AppConfig.ts","components/AnalyticsPageTracker.ts","components/PrivateRoute.tsx","layout.tsx","services/ServiceHelper.ts","services/AuthenticationService.ts","components/GlooIcon.tsx","components/GlooButton.tsx","entities/ProSubscription.ts","pages/authentication/signIn.tsx","entities/PromoCodeDiscountType.ts","services/ProSubscriptionService.ts","pages/cancel/cancelReason.tsx","entities/CreditCardType.ts","pages/cancel/cantCancel.tsx","pages/cancel/confirmation.tsx","pages/cancel/index.tsx","pages/downgrade/confirmation.tsx","pages/featureUnavailable.tsx","services/ChurchMediaSetPurchaseService.ts","services/CreditCardService.ts","services/PostalCodeService.ts","services/TaxService.ts","pages/purchase/churchMediaSet.tsx","pages/purchase/churchMediaSetConfirmation.tsx","pages/purchase/churchMediaSetSubscriptionConfirmation.tsx","pages/purchase/index.tsx","services/MediaItemPurchaseService.ts","pages/purchase/mediaItem.tsx","pages/purchase/mediaItemConfirmation.tsx","pages/purchase/mediaItemSubscriptionConfirmation.tsx","services/KitPurchaseService.ts","pages/purchase/PremiumSermonKit.tsx","pages/purchase/PremiumSermonKitConfirmation.tsx","pages/purchase/PremiumSermonKitSubscriptionConfirmation.tsx","pages/purchase/sermonSeriesKit.tsx","pages/purchase/sermonSeriesKitConfirmation.tsx","pages/purchase/sermonSeriesKitSubscriptionConfirmation.tsx","pages/subscribe/alreadyAMember.tsx","pages/subscribe/authChallenge.tsx","utilities/GoogleAnalytics.ts","utilities/EventTracking.ts","utilities/ProPlanIdDetermination.ts","pages/subscribe/billingInfo.tsx","pages/subscribe/confirmation.tsx","pages/subscribe/createAccount.tsx","utilities/subscribe/validateInput.ts","pages/subscribe/createEmbedAccount.tsx","pages/subscribe/createFullAccountQuickSetup.tsx","pages/subscribe/createFullAccountSinglePage.tsx","services/AccountService.ts","utilities/InputHelpers.ts","pages/subscribe/createMakerBundleAccount.tsx","pages/subscribe/index.tsx","pages/upgrade/cantUpgrade.tsx","pages/upgrade/confirmation.tsx","pages/upgrade/index.tsx","pages/upgrade/upgradeTier.tsx","pages/upgrade/upgradeTrial.tsx","services/AppConfigService.ts","app.tsx","index.tsx"],"names":["module","exports","AppConfigEnvironment","AnalyticsPageTracker","window","dataLayer","gtag","push","arguments","this","props","config","googleAnalytics","isEnabled","script","document","createElement","type","async","src","trackingId","getElementsByTagName","appendChild","Date","location","pathname","search","history","listen","children","React","withRouter","PrivateRoute","Component","component","rest","user","render","routeProps","redirectProps","to","state","from","Layout","noHeaderPaths","showHeaderBar","indexOf","className","Logo","firstName","lastName","profileImageUrl","ServerResponse","model","undefined","data","message","statusCode","valid","errors","ServerModelValidationResponse","FieldValidationError","fieldName","map","error","field","retVal","filter","forEach","str","serializeAxiosError","errorResponse","serverError","response","status","path","redirect","encodeURIComponent","replace","getParameterByName","name","url","href","results","RegExp","exec","decodeURIComponent","WebClient","axios","get","headers","Pragma","method","file","formData","FormData","append","AuthenticationService","Get","isSuccess","email","Post","password","rememberMe","context","GlooIcon","width","height","viewBox","fill","xmlns","x","y","rx","stroke","strokeWidth","d","GlooButton","style","pointerEvents","disabled","cursor","styleOverrides","ProSubscriptionTier","ProSubscriptionTerm","ProSubscriptionStatus","ProSubscriptionSource","SignIn","redirectState","redirectToReferrer","enableSubmit","title","e","preventDefault","setState","signIn","handleUpdateUser","isServerModelValidationResponse","isError","glooRedirectUrl","paymentsSiteUrl","glooUrl","mainSiteUrl","hasGenericError","role","dangerouslySetInnerHTML","__html","getGenericErrorSummary","onSubmit","handleFormSubmit","htmlFor","isFieldInError","id","required","value","onChange","target","getFieldErrorSummary","accountSiteUrl","PromoCodeDiscountType","ProCost","Reason","ProSubscriptionService","proPlan","appliedPromoCode","purchasePrice","price","finalPrice","appliesToMonthlyPlus","term","Monthly","tier","Plus","appliesToAnnualBasic","Annual","Basic","appliesToAnnualPlus","appliesToAnnualPremium","Premium","discountType","PercentOff","discountPercentage","discountAmount","roundToTwo","DollarOff","Math","max","annualPrice","ceil","cancellationReason","cancellationDescription","cancelImmediately","creditCardId","nameOnCard","creditCardNumber","cv2","expirationMonth","expirationYear","postalCode","phoneNumber","promoCode","proConversionPage","urlRef","utmCampaign","utmContent","utmMedium","utmSource","region","country","excludeTrial","number","round","CreditCardType","CancelReason","redirectTo","showNoSubscriptionError","caretPosTop","caretPosLeft","confirmCancel","reasonDescription","proSubscription","None","Active","reason","area","currentTarget","getBoundingClientRect","left","bottom","Expensive","Difficult","Quality","Retiring","FailedPayment","cancelSubscription","determineLegacyReason","redirectedFromCancel","Other","onClick","onClickReason","figureOutButton","marginTop","borderColor","renderReason","inAdminImpersonationMode","checked","opacity","textDecoration","whiteSpace","top","display","CantCancelSubscription","serviceStopDate","toLocaleDateString","CancelSubscriptionConfirmation","cancelledDate","CancelSubscription","cancellationReasons","currency","hasPaypal","previousLocation","source","Gloo","glooSubscriptionsUrl","downgradeSubscription","redirectedFromDowngrade","discountPrice","monthlyPrice","border","borderRadius","backgroundImage","DowgradeDude","color","margin","backgroundColor","alignItems","fontSize","transform","icon","DowngradeConfirmation","redirectToCancel","returnUrl","setTimeout","planName","sku","gaItem","nextBillPrice","planPrice","gaTransaction","FeaturedUnavailable","ChurchMediaSetPurchaseService","churchMediaSetId","saveCreditCard","CreditCardService","PostalCodeService","TaxService","isSubscription","tax","PurchaseChurchMediaSet","checkTax","a","churchMediaSet","salePrice","listPrice","getTaxAmount","taxRequest","taxAmount","handleCheckTaxFormSubmit","newCardPostalCodeCheck","taxIsZero","existingCreditCards","length","selectedCreditCardId","showUseNewCardForm","submitData","selectedCountryShortCode","validatedPostalCodeLocation","getUSCanPostalCode","postalCodeLocation","showCountries","upsoldToProPremium","upgradeToProPremium","purchaseChurchMediaSet","saveCard","churchMediaSetPurchase","redirectToConfirmation","trim","subscribeToProPremiumAndGiftChurchMediaSet","redirectToSubscriptionConfirmation","upgradeToProPremiumAndGiftChurchMediaSet","updateCv2","event","creditCardType","Amex","substr","updateCreditCard","cardNumber","newCardNumber","Visa","Mastercard","Discover","loading","showGenericError","getMonth","getFullYear","showLearnMoreProPremiumModal","upgradeToProPremiumCost","countries","match","params","Promise","all","getChurchMediaSet","getCountries","getCreditCards","responses","setResult","locationResult","creditCardsResult","publiclyAvailable","alreadyPurchased","getUpgradeToProPremiumCost","then","cost","defaultCard","find","cc","useCardByDefault","key","maskedNumber","autoComplete","parseInt","Array","keys","i","year","onBlur","c","twoCharCode","threeCharCode","marginLeft","stopPropagation","data-dismiss","aria-label","aria-hidden","image","description","churchMediaSetMediaItems","mediaItem","index","placeholder","toFixed","discountDollarAmount","discount","SSLLogo","PurchaseChurchMediaSetConfirmation","redirectToPurchase","orderId","PurchasehurchMediaSetSubscriptionConfirmation","CheckoutRouter","mediaItemId","atob","sermonSeriesKitId","premiumSermonKitId","userId","code","MediaItemPurchaseService","PurchaseMediaItem","getMediaItemPriceIncludingDiscountAndTax","purchaseMediaItem","mediaItemPurchase","subscribeToProPremiumAndGiftMediaItem","upgradeToProPremiumAndGiftMediaItem","handlePromoCodeFormSubmit","validatePromoCode","removePromoCode","enteredPromoCode","getMediaItem","mediaResult","flex","minWidth","float","fontWeight","PurchaseMediaItemConfirmation","PurchaseMediaItemSubscriptionConfirmation","KitPurchaseService","kit","kitId","PurchasePremiumSermonKit","GetPriceIncludingDiscountAndTax","premiumSermonKit","purchaseKit","premiumSermonKitPurchase","subscribeToProPremiumAndGiftKit","upgradeToProPremiumAndGiftKit","pskResult","inTrial","PurchasePremiumSermonKitConfirmation","PurchasePremiumSermonKitSubscriptionConfirmation","PurchasesermonSeriesKit","sermonSeriesKit","sermonSeriesKitPurchase","sskResult","PurchaseSermonSeriesKitConfirmation","PurchaseSermonSeriesKitSubscriptionConfirmation","SubscribeAlreadyAMember","redirectToSubscribe","SubscribeAuthChallenge","GTag","action","detail","EventTracking","CreateFullAccountSinglePage","onPageLoad","event_category","event_label","onSelectPlan","onChangePlan","onPromoCodeLinkClick","onPromoCodeSubmitted","onAccountCreated","onBillingInfoSubmitted","CreateFullAccountQuickSetup","CreateEmbedAccountQuickSetup","CreateAccount","BillingInfo","ProPlanIdDetermination","pre_selected_plan","selectedProPlanName","SubscribeBillingInfo","selectedProPlan","proPlans","p","selectedProPlanId","totalPrice","getProPlanPriceIncludingDiscount","subscribeToAnnualBasic","subscribeToAnnualPlus","subscribeToAnnualPremium","subscribeToMonthlyPlus","redirectedFromBillingInfo","hidePhoneNumberCapture","cameFromCreateAccount","promoCodeCollapsed","showPayPalOption","proSubscriptionSelectionExpanded","utm_promo","paypal","getProPlans","proPlansResult","startCheckout","plan","billingPeriod","getMonthlyPrice","trialAvailable","allowTrial","hasEverHadProSubscription","onPlanChange","preludeDescription","postDescriptionTrial","postDescription","renderPlanEntry","SubscribeConfirmation","isFromEmbed","redirectedFromEmbed","localStorage","getItem","SubscribeCreateAccount","handlePasswordChange","passwordStrengthWidth","passwordStrengthClass","passwordStrengthLabel","passwordLength","agreeToTerms","register","excludeTrail","onDeselectPlan","ValidateInput","isNaN","SubscribeCreateFullAccountEmbed","numbersOnlyRegex","validateFormSubmit","validateExpiryMonth","validateExpiryYear","SetUpBilling","fullName","splitName","split","slice","join","accountAlreadyCreated","postMessageWithDelay","changePlanActive","initialLoadingError","invalidRequiredFields","validationError","parent","postMessage","currentValue","keyCode","Number","marginBottom","abbrevPlanName","abbrevDescription","minHeight","verticalAlign","textAlign","determineSelectedInfo","minLength","maxLength","borderTopRightRadius","borderBottomRightRadius","onKeyDown","onkeyDownNumbersOnly","onBlurExpiryMonth","onBlurExpiryYear","dueToday","determineButtonText","lineHeight","renderTOS","SubscribeCreateFullAccountQuickSetup","CreditCards","SubscribeCreateFullAccountSinglePage","sentFullName","AccountService","InputHelper","onBlurPadLeftZero","postProTransaction","brand","category","quantity","transaction_id","affiliation","shipping","items","coupon","SubscribeCreateBundledMakerAccount","useState","setErrors","setLoading","setProPlan","setCardNumber","setCv2","expiryMonth","setExpiryMonth","expiryYear","setExpiryYear","setPostalCode","enable","setEnabled","hasHadProTrial","setHasHadProTrial","hasHadMakerTrial","setHasHadMakerTrial","setCountries","setShowCountries","setValidatedPostalCodeLocation","setSelectedCountryShortCode","setTaxAmount","useEffect","hasHadTrial","planResults","hasHadProTrailResult","hasHadMakerTrialResult","mountBundle","body","scrollHeight","postalLocation","bundleAnnualPlusAndSermonMaker","isModelValidation","padding","justifyContent","flexDirection","paddingTop","maxWidth","SubscribeRouter","fullAccountSinglePage","fullAccountQuickSetup","fullAccountEmbed","signOut","getIsExistingUser","getCombinedRedirectState","embed","existingRedirectState","CantUpgradeSubscription","subscription","UpgradeConfirmation","redirectToUpgrade","upgradedFromTrial","redirectedFromUpgradeTrial","redirectedFromUpgradeTier","costOfUpgradeForEcommerce","UpgradeRouter","UpgradeSubscriptionTier","upgradeToProPlus","upgradeToPlusCost","upgradeToPremiumCost","biennialUser","Biennial","plans","userProPlan","creditCards","getUpgradeToProPlusCost","upgradePriceEstimateFailed","getPlanPrice","UpgradeSubscriptionTrial","upgradeTrialToPaid","AppConfigService","library","add","faCcAmex","faCcDiscover","faCcMastercard","faCcVisa","faPaypal","faExpeditedssl","faAngleDown","faTag","faClock","App","environment","Production","sermonMakerSiteUrl","getAppConfig","getAuthenticatedUser","hasPayPal","catch","basename","baseUrl","exact","defaults","withCredentials","getAttribute","ReactDOM","querySelector","renderApp"],"mappings":"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EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAG,EACAF,EACAC,GAtLJ,iFAwLiBzH,EAAUc,KACrB,6CACA,CACE2F,eACAC,aACAC,mBACAC,MACAC,kBACAC,iBACAC,aACAC,cACAC,YACAC,oBACAC,SACAC,cACAC,aACAC,YACAC,YACAG,eACAF,SACAC,YA5MR,0QAkNId,EACAC,EACAC,EACAC,EACAC,EACAS,EACAC,GAxNJ,iFA0NiBzH,EAAUc,KACrB,sDACA,CACE6F,mBACAC,MACAC,kBACAC,iBACAC,aACAS,SACAC,YAnOR,8OAyOIhB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAzPJ,iFA2PiBzH,EAAUc,KACrB,gDACA,CACE2F,eACAC,aACAC,mBACAC,MACAC,kBACAC,iBACAC,aACAC,cACAC,YACAC,oBACAC,SACAC,cACAC,aACAC,YACAC,YACAC,SACAC,YA9QR,gQAoRIhB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GApSJ,iFAsSiBzH,EAAUc,KACrB,8CACA,CACE2F,eACAC,aACAC,mBACAC,MACAC,kBACAC,iBACAC,aACAC,cACAC,YACAC,oBACAC,SACAC,cACAC,aACAC,YACAC,YACAC,SACAC,YAzTR,+UA+TyBzH,EAAUW,IAC7B,qCAhUN,UA+TQzB,EA/TR,QAkUQrB,EAAe+C,UAAqB1B,GAlU5C,yCAmUaA,GAnUb,gCAqUa,IArUb,mLA0UIuH,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAS,EACAC,GAlVJ,iFAoViBzH,EAAUc,KACrB,0CACA,CACE2F,eACAC,aACAC,mBACAC,MACAC,kBACAC,iBACAC,aACAS,SACAC,YA/VR,0OAqWIhB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAS,EACAC,GA7WJ,iFA+WiBzH,EAAUc,KACrB,w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","file":"static/js/main.1d8b7fbf.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/ssl.77beb141.png\";","module.exports = __webpack_public_path__ + \"static/media/credit-cards.25e891b5.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/downgrade-guy.81e8b845.png\";","export enum AppConfigEnvironment {\r\n Development = \"Development\",\r\n Staging = \"Staging\",\r\n Production = \"Production\"\r\n}\r\n\r\nexport default interface AppConfig {\r\n environment: AppConfigEnvironment;\r\n googleAnalytics: { isEnabled: boolean, trackingId: string };\r\n mainSiteUrl: string;\r\n accountSiteUrl: string;\r\n sermonMakerSiteUrl: string;\r\n paymentsSiteUrl: string;\r\n glooSubscriptionsUrl: string;\r\n}\r\n","import * as React from 'react';\r\nimport { withRouter, RouteComponentProps } from 'react-router';\r\nimport AppConfig from '../entities/AppConfig';\r\n\r\ndeclare const gtag: (command: string, commandParameters?: any, additionalConfigInfo?: any) => any;\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n children?: React.ReactNode;\r\n}\r\n\r\nclass AnalyticsPageTracker extends React.Component {\r\n\r\n componentDidMount() {\r\n\r\n (window as any).dataLayer = (window as any).dataLayer || [];\r\n (window as any).gtag = function () { (window as any).dataLayer.push(arguments); };\r\n\r\n if (this.props.config.googleAnalytics.isEnabled) {\r\n\r\n let script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this.props.config.googleAnalytics.trackingId}`;\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n }\r\n\r\n gtag('js', new Date());\r\n gtag('config', this.props.config.googleAnalytics.trackingId, { 'send_page_view': false });\r\n gtag('config', this.props.config.googleAnalytics.trackingId, { 'page_path': this.props.location.pathname + this.props.location.search });\r\n\r\n this.props.history.listen(location => {\r\n gtag('config', this.props.config.googleAnalytics.trackingId, { 'page_path': location.pathname + location.search });\r\n });\r\n }\r\n\r\n render() {\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default withRouter(AnalyticsPageTracker);","import * as React from \"react\";\r\nimport { Redirect, Route, RouteComponentProps, RouteProps } from \"react-router-dom\";\r\nimport ApplicationUser from \"../../src/entities/ApplicationUser\";\r\n\r\ntype RouteComponent = React.FunctionComponent> | React.ComponentClass;\r\n\r\ninterface PrivateRouteProps extends RouteProps {\r\n user: ApplicationUser | null;\r\n}\r\n\r\nexport const PrivateRoute: React.FunctionComponent = ({ component, ...rest }) => {\r\n\r\n const renderComponent = (Component: RouteComponent) => (props: RouteComponentProps) => {\r\n\r\n return ;\r\n };\r\n\r\n if (!rest.user) {\r\n\r\n return (\r\n {\r\n\r\n const redirectProps = {\r\n to: {\r\n pathname: \"/auth/sign-in\",\r\n state: { from: routeProps.location },\r\n },\r\n };\r\n\r\n return ;\r\n }}\r\n />\r\n );\r\n }\r\n else if (component) {\r\n return ;\r\n }\r\n else if (rest.render) {\r\n return ;\r\n }\r\n else {\r\n return null;\r\n }\r\n};","import * as React from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router\";\r\nimport ApplicationUser from \"./entities/ApplicationUser\";\r\nimport \"./layout.css\";\r\nimport Logo from \"./resources/sc-logo.png\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser | null;\r\n children?: React.ReactNode;\r\n}\r\n\r\ntype State = {};\r\n\r\nclass Layout extends React.Component {\r\n noHeaderPaths = [\r\n \"/subscribe/create-full-account\",\r\n \"/subscribe/quick-setup\",\r\n \"/subscribe/embed\",\r\n \"/subscribe/bundle\",\r\n ];\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n render() {\r\n let showHeaderBar =\r\n this.noHeaderPaths.indexOf(this.props.location.pathname) === -1\r\n ? true\r\n : false;\r\n\r\n return (\r\n
\r\n {showHeaderBar && (\r\n
\r\n
\r\n \r\n {this.props.user && (\r\n \r\n {this.props.user.firstName} {this.props.user.lastName}\r\n \r\n )}\r\n {this.props.user && this.props.user.profileImageUrl && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n
{this.props.children}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(Layout);\r\n","import axios from 'axios';\r\nimport { AxiosError } from \"axios\";\r\n\r\nexport interface ServerError {\r\n message: string;\r\n statusCode: number;\r\n}\r\n\r\nexport class ServerError {\r\n static isServerError(model: any): model is ServerError {\r\n return model.message !== undefined && model.statusCode !== undefined;\r\n }\r\n}\r\n\r\nexport interface SuccessResponse {\r\n data: T;\r\n message: string;\r\n}\r\n\r\nexport class ServerResponse {\r\n static isSuccess(model: any): model is SuccessResponse {\r\n return model.data !== undefined && model.message !== undefined;\r\n }\r\n static isError(model: any): model is ServerError {\r\n return model.message !== undefined && model.statusCode !== undefined;\r\n }\r\n static isModelValidation(model: any): model is ServerModelValidationResponse {\r\n return model.valid !== undefined && model.errors !== undefined;\r\n }\r\n}\r\n\r\nexport interface ServerModelValidationResponse {\r\n valid: boolean;\r\n errors: FieldValidationError[];\r\n}\r\n\r\nexport class ServerModelValidationResponse {\r\n static isServerModelValidationResponse(model: any): model is ServerModelValidationResponse {\r\n return model.valid !== undefined && model.errors !== undefined;\r\n }\r\n}\r\n\r\nexport interface FieldValidationError {\r\n field: string;\r\n errors: string[];\r\n}\r\n\r\nexport class FieldValidationError {\r\n static isFieldInError(errors: FieldValidationError[], fieldName: string): boolean {\r\n return errors.map(error => error.field).indexOf(fieldName) > -1;\r\n }\r\n static getFieldErrorSummary(errors: FieldValidationError[], fieldName: string): string {\r\n var retVal = '';\r\n errors.filter(error => error.field === fieldName).forEach(error => {\r\n error.errors.forEach(str => retVal += str + ' ');\r\n });\r\n return retVal;\r\n }\r\n static hasGenericError(errors: FieldValidationError[]): boolean {\r\n\r\n return errors.map(error => error.field).indexOf('') > -1;\r\n }\r\n static getGenericErrorSummary(errors: FieldValidationError[]): string {\r\n var retVal = '';\r\n errors.filter(error => error.field === '').forEach(error => {\r\n error.errors.forEach(str => retVal += str + ' ');\r\n });\r\n return retVal;\r\n }\r\n}\r\n\r\nconst serializeAxiosError = (errorResponse: AxiosError) => {\r\n let serverError: ServerError;\r\n let response = errorResponse.response;\r\n\r\n // Happens if the http request gets killed mid request\r\n if (!response) {\r\n serverError = { message: \"Received no response\", statusCode: 500 };\r\n }\r\n else if (response.status === 404) {\r\n serverError = { message: \"Server is not responding\", statusCode: response.status };\r\n }\r\n // Redirect to sign in page\r\n else if (response.status === 401) {\r\n let path = window.location.pathname;\r\n let redirect = \"?returnUrl=\" + encodeURIComponent(path);\r\n window.location.replace(\"/auth/sign-in\" + redirect);\r\n let standardServerResponse: SuccessResponse = response.data;\r\n serverError = { message: standardServerResponse.message, statusCode: response.status };\r\n }\r\n else {\r\n let standardServerResponse: SuccessResponse = response.data;\r\n serverError = { message: standardServerResponse.message, statusCode: response.status };\r\n }\r\n\r\n return serverError;\r\n};\r\n\r\nexport const getEmailFromPaypal = (name: string, url?: string) => {\r\n // We need to take the email exact same way as paypal passes it we can't replace + signs with spaces.\r\n // Silly to roll our own, I know, but we need the name lookup to be case insensitive,\r\n // and I didn't want to loop through keys\r\n if (!url) {\r\n url = window.location.href;\r\n }\r\n\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\", 'i');\r\n var results = regex.exec(url);\r\n\r\n if (!results) {\r\n return null;\r\n }\r\n\r\n if (!results[2]) {\r\n return '';\r\n }\r\n\r\n return decodeURIComponent(results[2]);\r\n}\r\n\r\nexport const getParameterByName = (name: string, url?: string) => {\r\n\r\n // Silly to roll our own, I know, but we need the name lookup to be case insensitive,\r\n // and I didn't want to loop through keys\r\n if (!url) {\r\n url = window.location.href;\r\n }\r\n\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\", 'i');\r\n var results = regex.exec(url);\r\n\r\n if (!results) {\r\n return null;\r\n }\r\n\r\n if (!results[2]) {\r\n return '';\r\n }\r\n\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n}\r\n\r\n\r\nexport class WebClient {\r\n static async Get(url: string) {\r\n try {\r\n const response = await axios.get(url, { headers: { Pragma: 'no-cache' } });\r\n return response.data as (SuccessResponse | ServerModelValidationResponse);\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError((errorResult));\r\n }\r\n }\r\n\r\n static async GetWithoutModelValidation(url: string) {\r\n try {\r\n const response = await axios.get(url, { headers: { Pragma: 'no-cache' } });\r\n return response.data as SuccessResponse;\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError((errorResult));\r\n }\r\n }\r\n\r\n static async Post(url: string, data: any) {\r\n try {\r\n const response = await axios(url, {\r\n method: \"post\",\r\n data: data,\r\n headers: { Pragma: 'no-cache' }\r\n });\r\n return response.data as (SuccessResponse | ServerModelValidationResponse);\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError(errorResult);\r\n }\r\n }\r\n\r\n static async Put(url: string, data: any) {\r\n try {\r\n const response = await axios(url, {\r\n method: \"put\",\r\n data: data,\r\n headers: { Pragma: 'no-cache' }\r\n });\r\n return response.data as (SuccessResponse | ServerModelValidationResponse);\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError(errorResult);\r\n }\r\n }\r\n\r\n static async Delete(url: string, data?: any) {\r\n try {\r\n const response = await axios(url, {\r\n method: \"delete\",\r\n data: data,\r\n headers: { Pragma: 'no-cache' }\r\n });\r\n return response.data as (SuccessResponse | ServerModelValidationResponse);\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError(errorResult);\r\n }\r\n }\r\n\r\n static async PostFile(url: string, file: File) {\r\n try {\r\n let formData = new FormData();\r\n formData.append(\"file\", file, file.name);\r\n const response = await axios(url, {\r\n method: \"post\",\r\n data: formData,\r\n headers: { Pragma: 'no-cache' }\r\n });\r\n return response.data as SuccessResponse;\r\n }\r\n catch (errorResult) {\r\n return serializeAxiosError(errorResult);\r\n }\r\n }\r\n}\r\n","import { WebClient, ServerResponse } from '../services/ServiceHelper';\r\n\r\nimport ApplicationUser from '../entities/ApplicationUser';\r\n\r\nexport class AuthenticationService {\r\n\r\n static async getAuthenticatedUser() {\r\n\r\n var response = await WebClient.Get(\"api/Authentication/GetAuthenticatedUser\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n static async getIsExistingUser(email: string) {\r\n\r\n var response = await WebClient.Post(\"api/Authentication/GetIsExistingUser\", { email: email });\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n static register(firstName: string, lastName: string, email: string, password: string) {\r\n return WebClient.Post(\"api/Authentication/Register\", { firstName: firstName, lastName: lastName, email: email, password: password });\r\n }\r\n\r\n static signIn(email: string, password: string, rememberMe: boolean, context: 'SignIn' | 'AuthChallenge') {\r\n return WebClient.Post(\"api/Authentication/SignIn\", { email: email, password: password, rememberMe: rememberMe, context: context });\r\n }\r\n\r\n static async signOut() {\r\n\r\n var response = await WebClient.Get(\"api/Authentication/SignOut\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n}","import React from \"react\";\r\n\r\nexport function GlooIcon() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import React from \"react\";\r\n\r\nimport { GlooIcon } from \"./GlooIcon\";\r\n\r\ninterface Props {\r\n url: string;\r\n disabled?: boolean;\r\n styleOverrides?: React.CSSProperties;\r\n}\r\n\r\nexport function GlooButton(props: Props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}","export enum ProSubscriptionTier {\r\n None = 0,\r\n Basic = 1,\r\n Plus = 2,\r\n Premium = 3\r\n}\r\n\r\nexport enum ProSubscriptionTerm {\r\n None = 0,\r\n Monthly = 1,\r\n Annual = 12,\r\n Biennial = 24\r\n}\r\n\r\nexport enum ProSubscriptionStatus {\r\n None,\r\n Draft,\r\n PendingActivation,\r\n PendingAcceptance,\r\n Active,\r\n Cancelled,\r\n Expired,\r\n Suspended\r\n}\r\n\r\nexport enum ProSubscriptionSource {\r\n Zuora = 1,\r\n Gloo = 2,\r\n Employee = 3\r\n}\r\n\r\nexport default interface ProSubscription { \r\n cancelledDate?: string;\r\n inTrial: boolean;\r\n nextBillDate?: string;\r\n nextBillPrice?: number;\r\n planName: string;\r\n planPrice?: number;\r\n serviceStopDate?: string;\r\n status: ProSubscriptionStatus;\r\n subscriptionStartDate?: string;\r\n term: ProSubscriptionTerm;\r\n tier: ProSubscriptionTier;\r\n source: ProSubscriptionSource;\r\n}\r\n\r\nexport const ProCost = {\r\n basic : 149,\r\n plus : 199,\r\n plusMonthly : 25,\r\n premium : 299\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\n\r\nimport { FieldValidationError, ServerResponse, ServerModelValidationResponse } from '../../services/ServiceHelper';\r\n\r\nimport { AuthenticationService } from '../../services/AuthenticationService';\r\nimport AppConfig, { AppConfigEnvironment } from '../../entities/AppConfig';\r\nimport { GlooButton } from '../../components/GlooButton';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectToReferrer: boolean;\r\n enableSubmit: boolean;\r\n email: string;\r\n password: string;\r\n errors: FieldValidationError[];\r\n};\r\n\r\nexport default class SignIn extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToReferrer: false,\r\n enableSubmit: true,\r\n email: '',\r\n password: '',\r\n errors: []\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Sign In\";\r\n }\r\n\r\n async handleFormSubmit(e: React.FormEvent) {\r\n\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.email && this.state.password) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n const response = await AuthenticationService.signIn(this.state.email, this.state.password, false, 'SignIn');\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({ redirectToReferrer: true }, () => this.props.handleUpdateUser(response.data));\r\n }\r\n else if (ServerModelValidationResponse.isServerModelValidationResponse(response)) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n }\r\n else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = { field: \"\", errors: [response.message] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n catch (errorResult) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n let stateObject: any = this.props.location.state || { from: { pathname: \"/\" } };\r\n let from = stateObject.from;\r\n let { redirectToReferrer } = this.state;\r\n\r\n if (redirectToReferrer) {\r\n return ;\r\n }\r\n\r\n if (this.props.user) {\r\n return ;\r\n }\r\n\r\n const glooRedirectUrl = this.props.config.paymentsSiteUrl + from?.pathname\r\n const glooUrl = this.props.config.mainSiteUrl + '/account/gloo/login?redirectUri=' + encodeURIComponent(glooRedirectUrl);\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) &&\r\n
\r\n }\r\n
\r\n
\r\n
this.handleFormSubmit(e)}>\r\n
\r\n
\r\n
\r\n
Sign In to SermonCentral
\r\n
\r\n
\r\n

Please sign in to make changes to your account.

\r\n
\r\n \r\n this.setState({ email: e.target.value })} />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ password: e.target.value })} />\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n Forgot Password\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","export enum PromoCodeDiscountType {\r\n None = 0,\r\n PercentOff = 1,\r\n DollarOff = 2\r\n}\r\n","import ApplicationUser from \"../entities/ApplicationUser\";\r\nimport Country from \"../entities/Country\";\r\nimport { PromoCodeDiscountType } from \"../entities/PromoCodeDiscountType\";\r\nimport ProPlan from \"../entities/ProPlan\";\r\nimport {\r\n ProSubscriptionTerm,\r\n ProSubscriptionTier,\r\n} from \"../entities/ProSubscription\";\r\nimport ProSubscriptionPromoCode from \"../entities/ProSubscriptionPromoCode\";\r\nimport { ServerResponse, WebClient } from \"./ServiceHelper\";\r\n\r\nexport class ProSubscriptionService {\r\n static getProPlanPriceIncludingDiscount(\r\n proPlan: ProPlan,\r\n appliedPromoCode?: ProSubscriptionPromoCode\r\n ) {\r\n var purchasePrice = proPlan.price;\r\n\r\n var finalPrice = purchasePrice;\r\n\r\n if (appliedPromoCode) {\r\n if (\r\n !appliedPromoCode.appliesToMonthlyPlus &&\r\n proPlan.term === ProSubscriptionTerm.Monthly &&\r\n proPlan.tier === ProSubscriptionTier.Plus\r\n ) {\r\n return finalPrice;\r\n }\r\n\r\n if (\r\n !appliedPromoCode.appliesToAnnualBasic &&\r\n proPlan.term === ProSubscriptionTerm.Annual &&\r\n proPlan.tier === ProSubscriptionTier.Basic\r\n ) {\r\n return finalPrice;\r\n }\r\n\r\n if (\r\n !appliedPromoCode.appliesToAnnualPlus &&\r\n proPlan.term === ProSubscriptionTerm.Annual &&\r\n proPlan.tier === ProSubscriptionTier.Plus\r\n ) {\r\n return finalPrice;\r\n }\r\n\r\n if (\r\n !appliedPromoCode.appliesToAnnualPremium &&\r\n proPlan.term === ProSubscriptionTerm.Annual &&\r\n proPlan.tier === ProSubscriptionTier.Premium\r\n ) {\r\n return finalPrice;\r\n }\r\n\r\n if (appliedPromoCode.discountType === PromoCodeDiscountType.PercentOff) {\r\n var discountPercentage = appliedPromoCode.discountAmount / 100;\r\n var discountAmount =\r\n discountPercentage == 1\r\n ? purchasePrice\r\n : purchasePrice * discountPercentage;\r\n finalPrice = this.roundToTwo(purchasePrice - discountAmount);\r\n } else if (\r\n appliedPromoCode.discountType === PromoCodeDiscountType.DollarOff\r\n ) {\r\n finalPrice = purchasePrice - appliedPromoCode.discountAmount;\r\n }\r\n }\r\n\r\n return Math.max(0, finalPrice);\r\n }\r\n\r\n static getMonthlyPrice(annualPrice: number) {\r\n return Math.ceil(annualPrice / 12);\r\n }\r\n\r\n static async getProPlans() {\r\n var response = await WebClient.Get(\r\n \"api/ProSubscriptions/GetProPlans\"\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n static async getUpgradeToProPremiumCost() {\r\n var response = await WebClient.Get(\r\n \"api/ProSubscriptions/GetUpgradeToProPremiumCost\"\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n static async getUpgradeToProPlusCost() {\r\n return WebClient.Get(\r\n \"api/ProSubscriptions/GetUpgradeToProPlusCost\"\r\n );\r\n }\r\n\r\n static async cancelSubscription(\r\n cancellationReason: string,\r\n cancellationDescription: string,\r\n cancelImmediately: boolean\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/CancelSubscription\",\r\n { cancellationReason, cancellationDescription, cancelImmediately }\r\n );\r\n }\r\n\r\n static async downgradeSubscription() {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/DowngradeSubscription\",\r\n null\r\n );\r\n }\r\n\r\n static async startCheckout() {\r\n var response = await WebClient.Post(\r\n \"api/ProSubscriptions/StartCheckout\",\r\n null\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n static async subscribeToAnnualBasic(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n promoCode: string,\r\n proConversionPage: string,\r\n urlRef: string,\r\n utmCampaign: string,\r\n utmContent: string,\r\n utmMedium: string,\r\n utmSource: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/SubscribeToAnnualBasic\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n promoCode,\r\n proConversionPage,\r\n urlRef,\r\n utmCampaign,\r\n utmContent,\r\n utmMedium,\r\n utmSource,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToAnnualPlus(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n promoCode: string,\r\n proConversionPage: string,\r\n urlRef: string,\r\n utmCampaign: string,\r\n utmContent: string,\r\n utmMedium: string,\r\n utmSource: string,\r\n excludeTrial: boolean,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/SubscribeToAnnualPlus\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n promoCode,\r\n proConversionPage,\r\n urlRef,\r\n utmCampaign,\r\n utmContent,\r\n utmMedium,\r\n utmSource,\r\n excludeTrial,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async bundleAnnualPlusAndSermonMaker(\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/BundleAnnualPlusandSermonMaker\",\r\n {\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToAnnualPremium(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n promoCode: string,\r\n proConversionPage: string,\r\n urlRef: string,\r\n utmCampaign: string,\r\n utmContent: string,\r\n utmMedium: string,\r\n utmSource: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/SubscribeToAnnualPremium\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n promoCode,\r\n proConversionPage,\r\n urlRef,\r\n utmCampaign,\r\n utmContent,\r\n utmMedium,\r\n utmSource,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToMonthlyPlus(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n promoCode: string,\r\n proConversionPage: string,\r\n urlRef: string,\r\n utmCampaign: string,\r\n utmContent: string,\r\n utmMedium: string,\r\n utmSource: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/SubscribeToMonthlyPlus\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n promoCode,\r\n proConversionPage,\r\n urlRef,\r\n utmCampaign,\r\n utmContent,\r\n utmMedium,\r\n utmSource,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async getCountries() {\r\n var response = await WebClient.Get(\r\n \"api/ProSubscriptions/GetCountries\"\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response;\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n static async upgradeTrialToPaid(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/UpgradeTrialToPaid\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async upgradeToProPlus(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/UpgradeToProPlus\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async upgradeToProPremium(\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/UpgradeToProPremium\",\r\n {\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async validatePromoCode(\r\n promoCode: string,\r\n term: ProSubscriptionTerm,\r\n tier: ProSubscriptionTier\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ProSubscriptions/ValidatePromoCode\",\r\n { promoCode, term, tier }\r\n );\r\n }\r\n\r\n static roundToTwo(number: number) {\r\n return +(Math.round(+(number + \"e+2\")) + \"e-2\");\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus } from '../../entities/ProSubscription';\r\nimport { ProSubscriptionService } from '../../services/ProSubscriptionService';\r\nimport { ServerResponse, ServerModelValidationResponse, FieldValidationError } from '../../services/ServiceHelper';\r\n\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n showNoSubscriptionError: boolean;\r\n caretPosTop: number;\r\n caretPosLeft: number;\r\n reason?: Reason;\r\n reasonDescription: string;\r\n confirmCancel: boolean;\r\n cancelImmediately: boolean;\r\n enableSubmit: boolean;\r\n errors: FieldValidationError[];\r\n};\r\n\r\nenum Reason {\r\n Expensive = 1,\r\n Difficult,\r\n Quality,\r\n Retiring,\r\n Other,\r\n FailedPayment\r\n}\r\n\r\nexport default class CancelReason extends React.Component {\r\n dataLayer = (window as any).dataLayer = (window as any).dataLayer || [];\r\n redirectState: any = {};\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null,\r\n showNoSubscriptionError: false,\r\n caretPosTop: 0,\r\n caretPosLeft: 0,\r\n confirmCancel: false,\r\n cancelImmediately: false,\r\n enableSubmit: true,\r\n reasonDescription: '',\r\n errors: []\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - PRO Subscription Cancel Reason\";\r\n\r\n if (!this.props.user.proSubscription) {\r\n\r\n this.setState({ showNoSubscriptionError: true });\r\n }\r\n else if (this.props.user.proSubscription.term === ProSubscriptionTerm.None) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel/cant-cancel', state: this.redirectState } });\r\n }\r\n else if (this.props.user.proSubscription.status !== ProSubscriptionStatus.Active) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel/cant-cancel', state: this.redirectState } });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ 'event': 'optimize.activate' })\r\n }\r\n\r\n\r\n onClickReason(e: React.MouseEvent, reason: Reason) {\r\n e.preventDefault();\r\n\r\n let area = e.currentTarget.getBoundingClientRect();\r\n this.setState({\r\n caretPosLeft: area.left + (area.width / 2) - 18,\r\n caretPosTop: area.bottom - 12,\r\n reason\r\n });\r\n }\r\n\r\n determineLegacyReason() {\r\n let reason: string = '';\r\n\r\n switch (this.state.reason) {\r\n case Reason.Expensive:\r\n reason = 'Price is too expensive';\r\n break;\r\n case Reason.Difficult:\r\n reason = 'Too hard to use the website';\r\n break;\r\n case Reason.Quality:\r\n reason = 'Don\\'t like the quality of the media';\r\n break;\r\n case Reason.Retiring:\r\n reason = 'Retiring';\r\n break;\r\n case Reason.FailedPayment:\r\n reason = \"Failed payment, outstanding balance. admin cancel.\"\r\n break;\r\n default:\r\n reason = 'Prefer Other Resource';\r\n break;\r\n }\r\n\r\n return reason;\r\n }\r\n\r\n async cancelSubscription() {\r\n if (!this.state.enableSubmit || !this.state.reason) {\r\n return;\r\n }\r\n\r\n try {\r\n this.setState({ enableSubmit: false });\r\n const response = await ProSubscriptionService.cancelSubscription(this.determineLegacyReason(), this.state.reasonDescription, this.state.cancelImmediately);\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n\r\n this.props.handleUpdateUser(response.data);\r\n const redirectState = { redirectedFromCancel: true };\r\n this.setState({ redirectTo: { pathname: '/cancel/confirmation', state: redirectState } });\r\n }\r\n else if (ServerModelValidationResponse.isServerModelValidationResponse(response)) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n }\r\n else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = { field: \"\", errors: [response.message] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n catch (errorResult) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n\r\n figureOutButton(reason: Reason) {\r\n if (!this.state.reason || this.state.reason === reason) {\r\n return \"btn btn-outline-primary\";\r\n }\r\n else {\r\n return \"btn btn-outline-secondary\";\r\n }\r\n }\r\n\r\n renderReason() {\r\n if (!this.state.reason) {\r\n return null;\r\n }\r\n\r\n let reason: number = +this.state.reason;\r\n\r\n switch (reason) {\r\n case Reason.Expensive: {\r\n return (\r\n <>\r\n
\r\n \r\n The price is too expensive. We get it.

\r\n Please feel free to give us a call or contact us if you would like to request a discount.\r\n
\r\n
\r\n \r\n );\r\n }\r\n case Reason.Difficult: {\r\n return (\r\n <>\r\n
\r\n \r\n Your PRO subscription is too difficult to use.

\r\n We're sorry to hear that. Please feel free to give us a call or contact us if there's anything specific we could make more clear.\r\n
\r\n
\r\n \r\n );\r\n }\r\n case Reason.Quality: {\r\n return (\r\n <>\r\n
\r\n \r\n The media quality isn't sufficient.

\r\n We're sorry to hear that. We add new media weekly, but we understand you prefer something different.\r\n Please feel free to give us a call or contact us if there's anything specific we can do to make it better.\r\n
\r\n
\r\n \r\n );\r\n }\r\n case Reason.Retiring: {\r\n return (\r\n <>\r\n
\r\n \r\n You no longer need your subscription because you are either retiring or changing positions.

\r\n We're sorry to see you go. Thank you for being a part of our community.\r\n
\r\n
\r\n \r\n );\r\n }\r\n case Reason.Other: {\r\n return (\r\n <>\r\n
\r\n \r\n You prefer other resources for your preaching.

\r\n We get it and we're sorry to see you go. Please keep us in mind in the future, we'd love to have you back if you miss your PRO subscription.\r\n
\r\n
\r\n \r\n );\r\n }\r\n case Reason.FailedPayment: {\r\n return (\r\n <>\r\n
\r\n \r\n Failed payment, outstanding balance. admin cancel.\r\n \r\n
\r\n \r\n );\r\n }\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else if (this.state.showNoSubscriptionError) {\r\n return (\r\n
\r\n
\r\n

Cannot Cancel PRO Subscription

\r\n
You do not have a subscription to SermonCentral PRO.
\r\n \r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Are you sure you want to cancel?
\r\n
\r\n
\r\n
\r\n
\r\n \r\n When you cancel your PRO subscription, you will lose access to all PRO benefits like top-rated sermon illustrations,\r\n sermon downloads, church media downloads, sermon collections, and more.\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Still want to cancel? Select your reason below:\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {this.state.reason &&\r\n
\r\n
\r\n {this.renderReason()}\r\n
\r\n
\r\n }\r\n {this.props.user.inAdminImpersonationMode &&\r\n
\r\n
ADMIN ONLY
\r\n \r\n
\r\n
\r\n \r\n You can click Failed Payment to apply that as cancellation reason.\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
Need help? Call (866) 899-4426 or contact us online.
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {\r\n !this.state.confirmCancel &&\r\n \r\n }\r\n {\r\n this.state.reason && this.state.confirmCancel &&\r\n \r\n }\r\n No, don't cancel\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Need help? Call (866) 899-4426 or contact us online.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.state.reason &&\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n }\r\n}","export enum CreditCardType {\r\n Amex = 1,\r\n Mastercard = 2,\r\n Discover = 3,\r\n Visa = 4\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus } from '../../entities/ProSubscription';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n};\r\n\r\nexport default class CantCancelSubscription extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Cannot Cancel PRO Subscription\";\r\n\r\n if (!this.props.user.proSubscription) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel', state: this.redirectState } });\r\n }\r\n\r\n else if (this.props.user.proSubscription.term !== ProSubscriptionTerm.None && this.props.user.proSubscription.status === ProSubscriptionStatus.Active) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel', state: this.redirectState } });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n\r\n
\r\n
\r\n
\r\n

Cannot Cancel PRO Subscription

\r\n
\r\n {this.props.user.proSubscription?.term === ProSubscriptionTerm.None && !this.props.user.proSubscription?.serviceStopDate &&\r\n <> As a Site Administrator, your access to PRO Premium is not tied to a subscription.\r\n }\r\n {this.props.user.proSubscription?.term === ProSubscriptionTerm.None && this.props.user.proSubscription?.serviceStopDate &&\r\n <> Your Free Contributor PRO doesn't expire until {new Date(this.props.user.proSubscription?.serviceStopDate).toLocaleDateString()}.\r\n }\r\n {this.props.user.proSubscription?.serviceStopDate && this.props.user.proSubscription?.status !== ProSubscriptionStatus.Active &&\r\n <> Your subscription has already been canceled. Your benefits will end on {new Date(this.props.user.proSubscription?.serviceStopDate).toLocaleDateString()}.\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus } from '../../entities/ProSubscription';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n};\r\n\r\nexport default class CancelSubscriptionConfirmation extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - PRO Subscription Canceled\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /cancel\r\n if (!redirectState || !(redirectState as any).redirectedFromCancel) {\r\n this.setState({ redirectTo: { pathname: '/cancel', state: this.redirectState } });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n\r\n
\r\n
\r\n
\r\n

PRO Subscription Canceled

\r\n
\r\n We're sorry to see you leave SermonCentral PRO.\r\n {this.props.user.proSubscription && this.props.user.proSubscription.cancelledDate &&\r\n <>\r\n  Your cancellation will take effect on {new Date(this.props.user.proSubscription.cancelledDate).toLocaleDateString()}.\r\n \r\n }\r\n  We hope you'll continue to use SermonCentral for inspiration in the future.\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport ProSubscription, { ProSubscriptionTerm, ProSubscriptionStatus, ProCost, ProSubscriptionSource } from '../../entities/ProSubscription';\r\nimport { FieldValidationError, ServerResponse, ServerModelValidationResponse } from '../../services/ServiceHelper';\r\n\r\nimport { ProSubscriptionService } from '../../services/ProSubscriptionService';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nimport DowgradeDude from '../../resources/downgrade-guy.png';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n enableSubmit: boolean;\r\n redirectTo: LocationDescriptor | null;\r\n showNoSubscriptionError: boolean;\r\n errors: FieldValidationError[];\r\n};\r\n\r\nexport default class CancelSubscription extends React.Component {\r\n\r\n redirectState: any = {};\r\n cancellationReasons: string[] = ['Don\\'t like the quality of the media', 'Too hard to use the website', 'Price is too expensive', 'Budget reduction requirements', 'Retiring', 'Called to a career outside of church', 'Found another website I like better', 'Other'];\r\n dataLayer = (window as any).dataLayer = (window as any).dataLayer || [];\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n enableSubmit: true,\r\n redirectTo: null,\r\n showNoSubscriptionError: false,\r\n errors: []\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Cancel PRO Subscription\";\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n (this.redirectState as any).previousLocation = \"Cancel\";\r\n this.setState({ redirectTo: { pathname: '/feature-unavailable', state: this.redirectState } });\r\n }\r\n\r\n if (!this.props.user.proSubscription) {\r\n\r\n this.setState({ showNoSubscriptionError: true });\r\n }\r\n else if (this.props.user.proSubscription.term === ProSubscriptionTerm.None) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel/cant-cancel', state: this.redirectState } });\r\n }\r\n else if (this.props.user.proSubscription.status !== ProSubscriptionStatus.Active) {\r\n\r\n this.setState({ redirectTo: { pathname: '/cancel/cant-cancel', state: this.redirectState } });\r\n }\r\n else if (this.props.user.proSubscription.source === ProSubscriptionSource.Gloo){\r\n\r\n window.location.replace(this.props.config.glooSubscriptionsUrl)\r\n\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ 'event': 'optimize.activate' })\r\n }\r\n\r\n async downgradeSubscription() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n try {\r\n this.setState({ enableSubmit: false });\r\n const response = await ProSubscriptionService.downgradeSubscription();\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n\r\n this.props.handleUpdateUser(response.data);\r\n const redirectState = { redirectedFromDowngrade: true };\r\n this.setState({ redirectTo: { pathname: '/downgrade/confirmation', state: redirectState } });\r\n }\r\n else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = { field: \"\", errors: [response.message] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n catch (errorResult) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n\r\n render() {\r\n const discountPrice = ProCost.basic - 20;\r\n const monthlyPrice = discountPrice / 12;\r\n\r\n if (this.props.user?.proSubscription?.source === ProSubscriptionSource.Gloo) {\r\n return (\r\n
\r\n
\r\n

You have a Gloo Pro Subscription

\r\n
Redirecting to Gloo.
\r\n
\r\n
\r\n )\r\n }\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n } else if (this.state.showNoSubscriptionError) {\r\n return (\r\n
\r\n
\r\n

Cannot Cancel PRO Subscription

\r\n
You do not have a subscription to SermonCentral PRO.
\r\n \r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) &&\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Wait, before you cancel...
\r\n
\r\n
\r\n

\r\n

Special offer: Pro Basic Plan

\r\n

\r\n
\r\n
If you don't use unlimited media downloads, we do have an option for subscribers who want everyone else.
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n

Keep PRO Access

\r\n
\r\n
\r\n

for only ${discountPrice} a year

\r\n
\r\n
\r\n
keep your favorites and purchased media,
\r\n
\r\n
\r\n
plus access all non-media PRO features
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Keep PRO Access for only ${discountPrice} a year

\r\n
\r\n
\r\n
keep your favorites and purchased media, plus access all non-media PRO features
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

New Annual Fee

\r\n
Your PRO subscription fee will be reduced to ${discountPrice} per year. That's only ${monthlyPrice} per month!
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

One-Time Offer

\r\n
PRO Basic is priced at ${ProCost.basic}/year. This special ${discountPrice} price is an exclusive offer only available today. Don't miss it.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Grab this offer now to downgrade your account. You will have full access to all sermons, illustrations, sermon downloads,\r\n view sermons on one page, lectionary calendar, PRO partnership benefits and offers, sermon collections, SermonFolders, and Favorites. Media and Sermon Series\r\n Kits can be purchased a la carte, anytime.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectToCancel: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class DowngradeConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToCancel: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Downgrade Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /cancel\r\n if (!redirectState || !this.props.user.proSubscription || !(redirectState as any).redirectedFromDowngrade) {\r\n this.setState({\r\n redirectToCancel: true\r\n });\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n\r\n if ('gtag' in window) {\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? \"\";\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n // Price is set to be $109 (price change 6/9/21) off the nextBillPrice due to decision by Caleb 10/18. He didn't feel like it was worth\r\n // getting what Zuora was actually going to charge after invoices were generated, that this price was to detail\r\n // the measurement of success of this flow, we don't calc revenue from it. \r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": \"PRO Downgrade\",\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.nextBillPrice ? proSubscription.nextBillPrice : proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.nextBillPrice ? proSubscription.nextBillPrice : proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToCancel) {\r\n return ;\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for your PRO subscription!

\r\n
\r\n Return to SermonCentral to use PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n }\r\n}","import * as React from \"react\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../entities/AppConfig\";\r\nimport ApplicationUser from \"../entities/ApplicationUser\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {};\r\n\r\nexport default class FeaturedUnavailable extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n async componentDidMount() {\r\n let redirectState = this.props.location.state;\r\n document.title = \"SermonCentral Payments - Unavailable in your Region\";\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Unavailable in Your Region

\r\n
\r\n This product is not available in your region.{\" \"}\r\n Go back to your previous\r\n page.\r\n
\r\n \r\n Contact Support\r\n {\" \"}\r\n for help.\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import ApplicationUser from \"../entities/ApplicationUser\";\r\nimport ChurchMediaSet from \"../entities/ChurchMediaSet\";\r\nimport ChurchMediaSetPurchase from \"../entities/ChurchMediaSetPurchase\";\r\nimport { ServerResponse, WebClient } from \"./ServiceHelper\";\r\n\r\nexport class ChurchMediaSetPurchaseService {\r\n static async getChurchMediaSet(id: number) {\r\n var response = await WebClient.Get(\r\n `api/ChurchMediaSetPurchases/GetChurchMediaSet/${id}`\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n static async purchaseChurchMediaSet(\r\n churchMediaSetId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n saveCreditCard: boolean,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ChurchMediaSetPurchases/PurchaseChurchMediaSet\",\r\n {\r\n churchMediaSetId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n saveCreditCard,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToProPremiumAndGiftChurchMediaSet(\r\n churchMediaSetId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ChurchMediaSetPurchases/SubscribeToProPremiumAndGiftChurchMediaSet\",\r\n {\r\n churchMediaSetId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async upgradeToProPremiumAndGiftChurchMediaSet(\r\n churchMediaSetId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/ChurchMediaSetPurchases/UpgradeToProPremiumAndGiftChurchMediaSet\",\r\n {\r\n churchMediaSetId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static roundToTwo(number: number) {\r\n return +(Math.round(+(number + \"e+2\")) + \"e-2\");\r\n }\r\n}\r\n","import { WebClient, ServerResponse } from './ServiceHelper';\r\n\r\nimport CreditCard from '../entities/CreditCard';\r\n\r\nexport class CreditCardService {\r\n\r\n static async getCreditCards() {\r\n\r\n var response = await WebClient.Get(\"api/CreditCards/GetCreditCards\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}","import PostalCodeLocation from \"../entities/PostalCodeLocation\";\r\nimport { ServerResponse, WebClient } from \"../services/ServiceHelper\";\r\n\r\nexport class PostalCodeService {\r\n static async getUSCanPostalCode(postalCode: string) {\r\n var response = await WebClient.Get(\r\n `api/PostalCodeLocation/GetPostalCodeLocation/${postalCode}`\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { ServerResponse, WebClient } from \"../services/ServiceHelper\";\r\n\r\nexport class TaxService {\r\n static async getTaxAmount(\r\n postalCode: string,\r\n isSubscription: boolean,\r\n price: number\r\n ) {\r\n var response = await WebClient.Get(\r\n `api/Tax/GetCalculatedTax/${price}/${isSubscription}/${postalCode}`\r\n );\r\n\r\n if (ServerResponse.isSuccess<{ tax: number }>(response)) {\r\n return response.data.tax;\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport ChurchMediaSet from \"../../entities/ChurchMediaSet\";\r\nimport ChurchMediaSetPurchase from \"../../entities/ChurchMediaSetPurchase\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport { ProCost, ProSubscriptionTier } from \"../../entities/ProSubscription\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { ChurchMediaSetPurchaseService } from \"../../services/ChurchMediaSetPurchaseService\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n getParameterByName,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport \"./mediaItem.css\";\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n config: AppConfig;\r\n user: ApplicationUser;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n returnUrl: string;\r\n churchMediaSet?: ChurchMediaSet;\r\n showGenericError: boolean;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n saveCard: boolean;\r\n creditCardType?: CreditCardType;\r\n phoneNumber: string;\r\n enableSubmit: boolean;\r\n redirectToConfirmation: boolean;\r\n redirectToSubscriptionConfirmation: boolean;\r\n upsoldToProPremium: boolean;\r\n showLearnMoreProPremiumModal: boolean;\r\n upgradeToProPremium: boolean;\r\n upgradeToProPremiumCost?: number;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n newCardPostalCodeCheck?: string;\r\n taxIsZero: boolean;\r\n};\r\n\r\nexport default class PurchaseChurchMediaSet extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n returnUrl: \"\",\r\n showGenericError: false,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n saveCard: true,\r\n phoneNumber: \"\",\r\n enableSubmit: true,\r\n redirectToConfirmation: false,\r\n redirectToSubscriptionConfirmation: false,\r\n upsoldToProPremium: false,\r\n showLearnMoreProPremiumModal: false,\r\n upgradeToProPremium: false,\r\n upgradeToProPremiumCost: undefined,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Purchase Church Media Set\";\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n this.props.history.replace(\"/feature-unavailable\");\r\n }\r\n\r\n let redirectState = this.props.location.state || {};\r\n let id = (redirectState as any).id;\r\n if (!id) {\r\n id = this.props.match.params.id;\r\n }\r\n\r\n let returnUrl = (redirectState as any).returnUrl;\r\n if (!returnUrl) {\r\n returnUrl = getParameterByName(\"returnUrl\");\r\n }\r\n\r\n this.setState({\r\n returnUrl: returnUrl || \"\",\r\n });\r\n\r\n if (id) {\r\n const responses = await Promise.all([\r\n ChurchMediaSetPurchaseService.getChurchMediaSet(id),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n const [setResult, locationResult, creditCardsResult] = responses;\r\n let churchMediaSet = setResult;\r\n\r\n if (!churchMediaSet) {\r\n this.setState({ showGenericError: true, loading: false });\r\n } else if (!churchMediaSet.listPrice && !churchMediaSet.salePrice) {\r\n window.location.replace(churchMediaSet.url);\r\n } else if (!churchMediaSet.publiclyAvailable) {\r\n window.location.replace(churchMediaSet.url);\r\n } else if (churchMediaSet.alreadyPurchased) {\r\n window.location.replace(churchMediaSet.url);\r\n } else if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier >= ProSubscriptionTier.Plus\r\n ) {\r\n window.location.replace(churchMediaSet.url);\r\n } else {\r\n this.setState({ churchMediaSet: churchMediaSet });\r\n\r\n if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier < ProSubscriptionTier.Premium\r\n ) {\r\n ProSubscriptionService.getUpgradeToProPremiumCost().then((cost) => {\r\n this.setState({\r\n upgradeToProPremiumCost: cost,\r\n });\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve data to load. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n }\r\n this.setState({ loading: false });\r\n } else {\r\n this.setState({ showGenericError: true, loading: false });\r\n }\r\n }\r\n\r\n checkTax = async (postalCode: string) => {\r\n var price = this.state.churchMediaSet?.salePrice;\r\n if (!price) {\r\n price = this.state.churchMediaSet?.listPrice;\r\n }\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n false,\r\n price ? price : 0\r\n );\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n handleCheckTaxFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n if (this.state.newCardPostalCodeCheck) {\r\n this.setState({ enableSubmit: false });\r\n var price = this.state.churchMediaSet?.salePrice;\r\n if (!price) {\r\n price = this.state.churchMediaSet?.listPrice;\r\n }\r\n\r\n if (!price) {\r\n return;\r\n }\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n this.state.newCardPostalCodeCheck,\r\n false,\r\n +price\r\n );\r\n\r\n this.setState({ enableSubmit: true, errors: [] });\r\n\r\n if (taxRequest == null) {\r\n const error = {\r\n field: \"TaxCheck\",\r\n errors: [\r\n \"There was an error calculating tax, please check postal code and try again.\",\r\n ],\r\n };\r\n this.setState({\r\n errors: [error],\r\n enableSubmit: true,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n });\r\n } else {\r\n this.setState({ taxAmount: taxRequest, taxIsZero: taxRequest === 0 });\r\n }\r\n }\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response = null;\r\n if (!this.state.upsoldToProPremium && !this.state.upgradeToProPremium) {\r\n response = await ChurchMediaSetPurchaseService.purchaseChurchMediaSet(\r\n this.state.churchMediaSet!.id,\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.saveCard,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.redirectState = {\r\n churchMediaSet: this.state.churchMediaSet,\r\n churchMediaSetPurchase: response.data,\r\n returnUrl: this.state.returnUrl,\r\n appliedPromoCode: \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n return;\r\n }\r\n } else if (this.state.upsoldToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await ChurchMediaSetPurchaseService.subscribeToProPremiumAndGiftChurchMediaSet(\r\n this.state.churchMediaSet!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n churchMediaSet: this.state.churchMediaSet,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n } else if (this.state.upgradeToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await ChurchMediaSetPurchaseService.upgradeToProPremiumAndGiftChurchMediaSet(\r\n this.state.churchMediaSet!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n churchMediaSet: this.state.churchMediaSet,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response!.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n render() {\r\n const { churchMediaSet } = this.state;\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.redirectToSubscriptionConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.loading) {\r\n return (\r\n \r\n );\r\n } else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
\r\n Please contact our{\" \"}\r\n \r\n customer service\r\n {\" \"}\r\n team for help.\r\n
\r\n
\r\n
\r\n );\r\n } else if (churchMediaSet) {\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n if (!defaultCard) {\r\n defaultCard =\r\n this.state.existingCreditCards.length > 0\r\n ? this.state.existingCreditCards[0]\r\n : undefined;\r\n }\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n \r\n Your default card will be updated to the card\r\n you selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n )}\r\n\r\n {!this.props.user.proSubscription && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier <\r\n ProSubscriptionTier.Premium && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.state.showLearnMoreProPremiumModal && (\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n e.stopPropagation()}\r\n >\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n x\r\n \r\n
\r\n

\r\n \r\n With a Premium PRO Membership you will receive:\r\n \r\n

\r\n
    \r\n
  • Access to all Premium Sermon Series Kits
  • \r\n
  • Over 800 video illustrations
  • \r\n
  • Over 750 preaching slides
  • \r\n
  • Over 40 worship music videos
  • \r\n
  • Over 40 countdown, service starters
  • \r\n
  • Over 350 motion backgrounds
  • \r\n
  • Over 700 still backgrounds
  • \r\n
  • Over 1,000 royalty-free images
  • \r\n
  • Access top rated illustrations
  • \r\n
  • View sermons on a single page
  • \r\n
  • Download sermons as a PDF
  • \r\n
  • Lectionary calendar sermon search
  • \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n\r\n \r\n {this.state.enableSubmit &&\r\n !this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && <>PURCHASE}\r\n {this.state.enableSubmit &&\r\n (this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && <>SUBSCRIBE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Selected Church Media Set\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {churchMediaSet.churchMediaSetMediaItems.map(\r\n (mediaItem, index) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n )}\r\n
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n \r\n
\r\n \r\n this.setState({\r\n newCardPostalCodeCheck: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Check Tax\r\n \r\n
\r\n
\r\n No tax for this postal code\r\n
\r\n \r\n
\r\n \r\n Taxes may apply to this purchase, enter your postal\r\n code to check.\r\n \r\n \r\n )}\r\n
\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium &&\r\n churchMediaSet.listPrice && (\r\n <>\r\n {churchMediaSet.salePrice ? (\r\n <>\r\n \r\n List price\r\n \r\n \r\n ${churchMediaSet.listPrice.toFixed(2)}\r\n \r\n \r\n \r\n \r\n Discount\r\n \r\n - $\r\n {churchMediaSet.discountDollarAmount.toFixed(\r\n 2\r\n )}{\" \"}\r\n ({churchMediaSet.discount}%)\r\n \r\n \r\n {this.state.taxAmount > 0 && (\r\n \r\n Tax\r\n ${this.state.taxAmount}\r\n \r\n )}\r\n \r\n Total (USD)\r\n \r\n {(\r\n churchMediaSet.salePrice +\r\n this.state.taxAmount\r\n ).toFixed(2)}\r\n \r\n \r\n \r\n ) : (\r\n <>\r\n {this.state.taxAmount > 0 && (\r\n \r\n Tax\r\n {this.state.taxAmount}\r\n \r\n )}\r\n \r\n Total (USD)\r\n \r\n {(\r\n churchMediaSet.listPrice +\r\n this.state.taxAmount\r\n ).toFixed(2)}\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && FREE}\r\n
\r\n
\r\n
\r\n\r\n {this.state.upsoldToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n ${ProCost.premium}/yr with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically unless you cancel prior to renewal. We may\r\n contact you with important information regarding your PRO\r\n subscription. Standard data fees and text messaging rates\r\n may apply based on your plan with your mobile phone\r\n carrier.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n {this.state.upgradeToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n $\r\n {this.state.upgradeToProPremiumCost\r\n ? this.state.upgradeToProPremiumCost\r\n : ProCost.premium}{\" \"}\r\n with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically at ${ProCost.premium}/yr unless you cancel prior to\r\n renewal.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from\r\n our registration page to our secure servers encrypted for\r\n your protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport ChurchMediaSet from \"../../entities/ChurchMediaSet\";\r\nimport ChurchMediaSetPurchase from \"../../entities/ChurchMediaSetPurchase\";\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n churchMediaSet?: ChurchMediaSet;\r\n churchMediaSetPurchase?: ChurchMediaSetPurchase;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchaseChurchMediaSetConfirmation extends React.Component<\r\n Props,\r\n State\r\n> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n document.title =\r\n \"SermonCentral Payments - Purchase Media Item Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected,\r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true,\r\n });\r\n } else {\r\n this.setState({\r\n churchMediaSet: (redirectState as any).churchMediaSet,\r\n churchMediaSetPurchase: (redirectState as any).churchMediaSetPurchase,\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl,\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n const churchMediaSet = this.state.churchMediaSet!;\r\n const churchMediaSetPurchase = this.state.churchMediaSetPurchase!;\r\n const user = this.props.user;\r\n \r\n window.dataLayer.push({\r\n 'event':'orderComplete',\r\n 'orderValue': churchMediaSetPurchase.purchasePrice,\r\n 'orderCurrency': user.currency || \"USD\",\r\n 'orderId': churchMediaSetPurchase.orderId, \r\n 'ecData': { 'email': user.email, \"phone_number\": user.phoneNumber?.replace(/\\D/g, \"\")}\r\n });\r\n\r\n if (\"gtag\" in window) {\r\n\r\n window.gaItem = {\r\n \"id\": churchMediaSet.id,\r\n \"name\": churchMediaSet.name,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": churchMediaSet.type,\r\n \"quantity\": \"1\",\r\n \"price\": churchMediaSetPurchase.purchasePrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": churchMediaSetPurchase.orderId,\r\n \"affiliation\": \"Payments Digital Download\",\r\n \"value\": churchMediaSetPurchase.purchasePrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [window.gaItem],\r\n \"coupon\": (redirectState as any).appliedPromoCode || \"\",\r\n };\r\n\r\n gtag(\"event\", \"purchase\", window.gaTransaction);\r\n }\r\n }, 1000);\r\n }\r\n }\r\n render() {\r\n if (this.state.redirectToPurchase) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for your purchase!

\r\n
\r\n Return to SermonCentral to download your media item, or{\" \"}\r\n \r\n print a receipt\r\n {\" \"}\r\n for your records.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport ChurchMediaSet from '../../entities/ChurchMediaSet';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n churchMediaSet?: ChurchMediaSet;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchasehurchMediaSetSubscriptionConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Media Item Subscription Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n churchMediaSet: (redirectState as any).churchMediaSet\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n\r\n if ('gtag' in window) {\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? \"\";\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": planName,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ]\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for signing up for SermonCentral PRO!

\r\n
\r\n Return to SermonCentral to download your media item and use other PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { Link, RouteComponentProps, Redirect } from \"react-router-dom\";\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport { getParameterByName } from \"../../services/ServiceHelper\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n showGenericError: boolean;\r\n};\r\n\r\nexport default class CheckoutRouter extends React.Component {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null,\r\n showGenericError: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Checkout\";\r\n\r\n if (this.props.user) {\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n\r\n (this.redirectState as any).previousLocation = \"Main Purchase\";\r\n this.setState({ redirectTo: { pathname: '/feature-unavailable', state: this.redirectState } });\r\n }\r\n }\r\n\r\n try {\r\n\r\n let mediaItemId = getParameterByName('mvId');\r\n if (mediaItemId) {\r\n mediaItemId = window.atob(mediaItemId);\r\n }\r\n\r\n let sermonSeriesKitId = getParameterByName('kId');\r\n if (sermonSeriesKitId) {\r\n sermonSeriesKitId = window.atob(sermonSeriesKitId);\r\n }\r\n\r\n let premiumSermonKitId = getParameterByName('pskId');\r\n if (premiumSermonKitId) {\r\n premiumSermonKitId = window.atob(premiumSermonKitId);\r\n }\r\n\r\n let churchMediaSetId = getParameterByName('cmsId');\r\n if (churchMediaSetId) {\r\n churchMediaSetId = window.atob(churchMediaSetId);\r\n }\r\n\r\n let userId = getParameterByName('cId');\r\n if (userId) {\r\n userId = window.atob(userId);\r\n }\r\n\r\n let code = getParameterByName('code');\r\n let returnUrl = getParameterByName('returnUrl');\r\n\r\n if (mediaItemId) {\r\n this.setState({ redirectTo: { pathname: `/purchase/media/${mediaItemId}`, state: { id: mediaItemId, userId: userId, code: code, returnUrl: returnUrl } } });\r\n\r\n }\r\n else if (sermonSeriesKitId) {\r\n this.setState({ redirectTo: { pathname: `/purchase/sermon-series-kit/${sermonSeriesKitId}`, state: { id: sermonSeriesKitId, userId: userId, code: code, returnUrl: returnUrl } } });\r\n } \r\n else if (premiumSermonKitId) {\r\n this.setState({ redirectTo: { pathname: `/purchase/premium-sermon-kit/${premiumSermonKitId}`, state: { id: premiumSermonKitId, userId: userId, code: code, returnUrl: returnUrl } } });\r\n } \r\n else if (churchMediaSetId) {\r\n this.setState({ redirectTo: { pathname: `/purchase/church-media-set/${churchMediaSetId}`, state: { id: churchMediaSetId, userId: userId, code: code, returnUrl: returnUrl } } });\r\n }\r\n else {\r\n this.setState({ showGenericError: true });\r\n }\r\n }\r\n catch {\r\n this.setState({ showGenericError: true });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
Please contact our customer service team for help.
\r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n}\r\n","import ApplicationUser from \"../entities/ApplicationUser\";\r\nimport MediaItem from \"../entities/MediaItem\";\r\nimport MediaItemPromoCode from \"../entities/MediaItemPromoCode\";\r\nimport MediaItemPurchase from \"../entities/MediaItemPurchase\";\r\nimport { PromoCodeDiscountType } from \"../entities/PromoCodeDiscountType\";\r\nimport { ServerResponse, WebClient } from \"./ServiceHelper\";\r\n\r\nexport class MediaItemPurchaseService {\r\n static getMediaItemPriceIncludingDiscountAndTax(\r\n mediaItem: MediaItem,\r\n tax: number,\r\n appliedPromoCode?: MediaItemPromoCode\r\n ) {\r\n var purchasePrice = mediaItem.salePrice\r\n ? mediaItem.salePrice\r\n : mediaItem.listPrice\r\n ? mediaItem.listPrice\r\n : 0;\r\n\r\n var finalPrice = purchasePrice;\r\n\r\n if (appliedPromoCode) {\r\n if (appliedPromoCode.discountType === PromoCodeDiscountType.PercentOff) {\r\n var discountPercentage = appliedPromoCode.discountAmount / 100;\r\n if (discountPercentage == 1) {\r\n finalPrice = 0;\r\n } else {\r\n var discountAmount = purchasePrice * discountPercentage;\r\n finalPrice = this.roundToTwo(purchasePrice - discountAmount);\r\n }\r\n } else if (\r\n appliedPromoCode.discountType === PromoCodeDiscountType.DollarOff\r\n ) {\r\n finalPrice = purchasePrice - appliedPromoCode.discountAmount;\r\n }\r\n }\r\n\r\n finalPrice = finalPrice + tax;\r\n\r\n return Math.max(0, finalPrice);\r\n }\r\n\r\n static async getMediaItem(id: number) {\r\n var response = await WebClient.Get(\r\n `api/MediaItemPurchases/GetMediaItem/${id}`\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n static async purchaseMediaItem(\r\n mediaItemId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n saveCreditCard: boolean,\r\n promoCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/MediaItemPurchases/PurchaseMediaItem\",\r\n {\r\n mediaItemId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n saveCreditCard,\r\n promoCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToProPremiumAndGiftMediaItem(\r\n mediaItemId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/MediaItemPurchases/SubscribeToProPremiumAndGiftMediaItem\",\r\n {\r\n mediaItemId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async upgradeToProPremiumAndGiftMediaItem(\r\n mediaItemId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/MediaItemPurchases/UpgradeToProPremiumAndGiftMediaItem\",\r\n {\r\n mediaItemId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async validatePromoCode(promoCode: string, mediaItemId: number) {\r\n return await WebClient.Post(\r\n \"api/MediaItemPurchases/ValidatePromoCode\",\r\n { promoCode, mediaItemId }\r\n );\r\n }\r\n\r\n static roundToTwo(number: number) {\r\n return +(Math.round(+(number + \"e+2\")) + \"e-2\");\r\n }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport MediaItem from \"../../entities/MediaItem\";\r\nimport MediaItemPromoCode from \"../../entities/MediaItemPromoCode\";\r\nimport MediaItemPurchase from \"../../entities/MediaItemPurchase\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport { ProCost, ProSubscriptionTier } from \"../../entities/ProSubscription\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { MediaItemPurchaseService } from \"../../services/MediaItemPurchaseService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n getParameterByName,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport \"./mediaItem.css\";\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n config: AppConfig;\r\n user: ApplicationUser;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n returnUrl: string;\r\n mediaItem?: MediaItem;\r\n showGenericError: boolean;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n saveCard: boolean;\r\n creditCardType?: CreditCardType;\r\n phoneNumber: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: MediaItemPromoCode;\r\n enableSubmit: boolean;\r\n redirectToConfirmation: boolean;\r\n redirectToSubscriptionConfirmation: boolean;\r\n upsoldToProPremium: boolean;\r\n showLearnMoreProPremiumModal: boolean;\r\n upgradeToProPremium: boolean;\r\n upgradeToProPremiumCost?: number;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n newCardPostalCodeCheck?: string;\r\n taxIsZero: boolean;\r\n};\r\n\r\nexport default class PurchaseMediaItem extends React.Component {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n returnUrl: \"\",\r\n showGenericError: false,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n saveCard: true,\r\n phoneNumber: \"\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n enableSubmit: true,\r\n redirectToConfirmation: false,\r\n redirectToSubscriptionConfirmation: false,\r\n upsoldToProPremium: false,\r\n showLearnMoreProPremiumModal: false,\r\n upgradeToProPremium: false,\r\n upgradeToProPremiumCost: undefined,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Purchase Media Item\";\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n this.props.history.replace(\"/feature-unavailable\");\r\n }\r\n\r\n let redirectState = this.props.location.state || {};\r\n let id = (redirectState as any).id;\r\n if (!id) {\r\n id = this.props.match.params.id;\r\n }\r\n\r\n let returnUrl = (redirectState as any).returnUrl;\r\n if (!returnUrl) {\r\n returnUrl = getParameterByName(\"returnUrl\");\r\n }\r\n\r\n let enteredPromoCode = (redirectState as any).code;\r\n if (!enteredPromoCode) {\r\n enteredPromoCode = getParameterByName(\"code\");\r\n }\r\n\r\n this.setState({\r\n returnUrl: returnUrl || \"\",\r\n enteredPromoCode: enteredPromoCode || \"\",\r\n });\r\n\r\n if (id) {\r\n const responses = await Promise.all([\r\n MediaItemPurchaseService.getMediaItem(id),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n const [mediaResult, locationResult, creditCardsResult] = responses;\r\n\r\n let mediaItem = mediaResult;\r\n if (!mediaItem) {\r\n this.setState({ showGenericError: true, loading: false });\r\n } else if (!mediaItem.listPrice && !mediaItem.salePrice) {\r\n window.location.replace(mediaItem.url);\r\n } else if (!mediaItem.publiclyAvailable) {\r\n window.location.replace(mediaItem.url);\r\n } else if (mediaItem.alreadyPurchased) {\r\n window.location.replace(mediaItem.url);\r\n } else if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier >= ProSubscriptionTier.Plus\r\n ) {\r\n window.location.replace(mediaItem.url);\r\n } else {\r\n this.setState({ mediaItem: mediaItem });\r\n\r\n if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier < ProSubscriptionTier.Premium\r\n ) {\r\n ProSubscriptionService.getUpgradeToProPremiumCost().then((cost) => {\r\n this.setState({\r\n upgradeToProPremiumCost: cost,\r\n });\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve data to load. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n this.setState({ loading: false });\r\n }\r\n } else {\r\n this.setState({ showGenericError: true, loading: false });\r\n }\r\n }\r\n\r\n checkTax = async (postalCode: string) => {\r\n var price =\r\n MediaItemPurchaseService.getMediaItemPriceIncludingDiscountAndTax(\r\n this.state.mediaItem!,\r\n 0,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(postalCode, false, +price);\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n handleCheckTaxFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n if (this.state.newCardPostalCodeCheck) {\r\n this.setState({ enableSubmit: false });\r\n var price =\r\n MediaItemPurchaseService.getMediaItemPriceIncludingDiscountAndTax(\r\n this.state.mediaItem!,\r\n 0,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n this.state.newCardPostalCodeCheck,\r\n false,\r\n +price\r\n );\r\n\r\n this.setState({ enableSubmit: true, errors: [] });\r\n\r\n if (taxRequest == null) {\r\n const error = {\r\n field: \"TaxCheck\",\r\n errors: [\r\n \"There was an error calculating tax, please check postal code and try again.\",\r\n ],\r\n };\r\n this.setState({\r\n errors: [error],\r\n enableSubmit: true,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n });\r\n } else {\r\n this.setState({ taxAmount: taxRequest, taxIsZero: taxRequest === 0 });\r\n }\r\n }\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response = null;\r\n if (!this.state.upsoldToProPremium && !this.state.upgradeToProPremium) {\r\n response = await MediaItemPurchaseService.purchaseMediaItem(\r\n this.state.mediaItem!.id,\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.saveCard,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.redirectState = {\r\n mediaItem: this.state.mediaItem,\r\n mediaItemPurchase: response.data,\r\n returnUrl: this.state.returnUrl,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n return;\r\n }\r\n } else if (this.state.upsoldToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await MediaItemPurchaseService.subscribeToProPremiumAndGiftMediaItem(\r\n this.state.mediaItem!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n mediaItem: this.state.mediaItem,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } else if (this.state.upgradeToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await MediaItemPurchaseService.upgradeToProPremiumAndGiftMediaItem(\r\n this.state.mediaItem!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n mediaItem: this.state.mediaItem,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n\r\n if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response!.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await this.validatePromoCode();\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n const response = await MediaItemPurchaseService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n this.state.mediaItem!.id\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () =>\r\n this.checkTax(\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm &&\r\n this.state.newCardPostalCodeCheck\r\n ? this.state.newCardPostalCodeCheck\r\n : this.state.postalCode\r\n )\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n removePromoCode = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n this.setState({\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n });\r\n };\r\n\r\n render() {\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.redirectToSubscriptionConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.loading) {\r\n return (\r\n \r\n );\r\n } else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
\r\n Please contact our{\" \"}\r\n \r\n customer service\r\n {\" \"}\r\n team for help.\r\n
\r\n
\r\n
\r\n );\r\n } else if (this.state.mediaItem) {\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n if (!defaultCard) {\r\n defaultCard =\r\n this.state.existingCreditCards.length > 0\r\n ? this.state.existingCreditCards[0]\r\n : undefined;\r\n }\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n \r\n Your default card will be updated to the card\r\n you selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n )}\r\n\r\n {!this.props.user.proSubscription && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier <\r\n ProSubscriptionTier.Premium && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.state.showLearnMoreProPremiumModal && (\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n e.stopPropagation()}\r\n >\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n x\r\n \r\n
\r\n

\r\n \r\n With a Premium PRO Membership you will receive:\r\n \r\n

\r\n
    \r\n
  • Access to all Premium Sermon Series Kits
  • \r\n
  • Over 800 video illustrations
  • \r\n
  • Over 750 preaching slides
  • \r\n
  • Over 40 worship music videos
  • \r\n
  • Over 40 countdown, service starters
  • \r\n
  • Over 350 motion backgrounds
  • \r\n
  • Over 700 still backgrounds
  • \r\n
  • Over 1,000 royalty-free images
  • \r\n
  • Access top rated illustrations
  • \r\n
  • View sermons on a single page
  • \r\n
  • Download sermons as a PDF
  • \r\n
  • Lectionary calendar sermon search
  • \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n\r\n \r\n {this.state.enableSubmit &&\r\n !this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && <>PURCHASE}\r\n {this.state.enableSubmit &&\r\n (this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && <>SUBSCRIBE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Selected Media Item\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {!this.state.appliedPromoCode && (\r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n )}\r\n\r\n {this.state.appliedPromoCode && (\r\n
\r\n Promo applied:\r\n  \r\n \r\n {this.state.appliedPromoCode.code}\r\n \r\n    \r\n \r\n x\r\n \r\n
\r\n )}\r\n \r\n )}\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n \r\n
\r\n \r\n this.setState({\r\n newCardPostalCodeCheck: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Check Tax\r\n \r\n
\r\n
\r\n No tax for this postal code\r\n
\r\n \r\n
\r\n \r\n Taxes may apply to this purchase, enter your postal\r\n code to check.\r\n \r\n \r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n Total (USD)\r\n FREE\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {this.state.taxAmount > 0 && (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n Subtotal\r\n \r\n {MediaItemPurchaseService.getMediaItemPriceIncludingDiscountAndTax(\r\n this.state.mediaItem!,\r\n 0,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Tax\r\n \r\n {this.state.taxAmount}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Total (USD)\r\n \r\n $\r\n {MediaItemPurchaseService.getMediaItemPriceIncludingDiscountAndTax(\r\n this.state.mediaItem!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n \r\n )}\r\n {this.state.taxAmount === 0 && (\r\n
\r\n Total (USD)$\r\n {MediaItemPurchaseService.getMediaItemPriceIncludingDiscountAndTax(\r\n this.state.mediaItem!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n
\r\n\r\n {this.state.upsoldToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n ${ProCost.premium}/yr with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically unless you cancel prior to renewal. We may\r\n contact you with important information regarding your PRO\r\n subscription. Standard data fees and text messaging rates\r\n may apply based on your plan with your mobile phone\r\n carrier.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n {this.state.upgradeToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n $\r\n {this.state.upgradeToProPremiumCost\r\n ? this.state.upgradeToProPremiumCost\r\n : ProCost.premium}{\" \"}\r\n with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically at ${ProCost.premium}/yr unless you cancel prior to\r\n renewal.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from\r\n our registration page to our secure servers encrypted for\r\n your protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport MediaItem from '../../entities/MediaItem';\r\nimport MediaItemPurchase from '../../entities/MediaItemPurchase';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n mediaItem?: MediaItem;\r\n mediaItemPurchase?: MediaItemPurchase;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchaseMediaItemConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Purchase Media Item Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n mediaItem: (redirectState as any).mediaItem,\r\n mediaItemPurchase: (redirectState as any).mediaItemPurchase\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n const mediaItem = this.state.mediaItem!;\r\n const mediaItemPurchase = this.state.mediaItemPurchase!;\r\n const user = this.props.user;\r\n \r\n window.dataLayer.push({\r\n 'event':'orderComplete',\r\n 'orderValue': mediaItemPurchase.purchasePrice,\r\n 'orderCurrency': user.currency || \"USD\",\r\n 'orderId': mediaItemPurchase.orderId, \r\n 'ecData': { 'email': user.email, \"phone_number\": user.phoneNumber?.replace(/\\D/g, \"\")}\r\n });\r\n\r\n if ('gtag' in window) {\r\n\r\n window.gaItem = {\r\n \"id\": mediaItem.id,\r\n \"name\": mediaItem.name,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": mediaItem.type,\r\n \"quantity\": \"1\",\r\n \"price\": mediaItemPurchase.purchasePrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": mediaItemPurchase.orderId,\r\n \"affiliation\": \"Payments Digital Download\",\r\n \"value\": mediaItemPurchase.purchasePrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for your purchase!

\r\n
\r\n Return to SermonCentral to download your media item, or print a receipt for your records.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport MediaItem from '../../entities/MediaItem';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n mediaItem?: MediaItem;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchaseMediaItemSubscriptionConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Media Item Subscription Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n mediaItem: (redirectState as any).mediaItem\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n\r\n if ('gtag' in window) {\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? \"\";\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": planName,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ]\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for signing up for SermonCentral PRO!

\r\n
\r\n Return to SermonCentral to download your media item and use other PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import ApplicationUser from \"../entities/ApplicationUser\";\r\nimport { PromoCodeDiscountType } from \"../entities/PromoCodeDiscountType\";\r\nimport Kit from \"../entities/Kit\";\r\nimport KitPromoCode from \"../entities/KitPromoCode\";\r\nimport KitPurchase from \"../entities/KitPurchase\";\r\nimport { ServerResponse, WebClient } from \"./ServiceHelper\";\r\n\r\nexport class KitPurchaseService {\r\n static GetPriceIncludingDiscountAndTax(\r\n kit: Kit,\r\n tax: number,\r\n appliedPromoCode?: KitPromoCode\r\n ) {\r\n var purchasePrice = kit.salePrice\r\n ? kit.salePrice\r\n : kit.listPrice\r\n ? kit.listPrice\r\n : 0;\r\n\r\n var finalPrice = purchasePrice;\r\n\r\n if (appliedPromoCode) {\r\n if (appliedPromoCode.discountType === PromoCodeDiscountType.PercentOff) {\r\n var discountPercentage = appliedPromoCode.discountAmount / 100;\r\n if (discountPercentage == 1) {\r\n finalPrice = 0;\r\n } else {\r\n var discountAmount = purchasePrice * discountPercentage;\r\n finalPrice = this.roundToTwo(purchasePrice - discountAmount);\r\n }\r\n } else if (\r\n appliedPromoCode.discountType === PromoCodeDiscountType.DollarOff\r\n ) {\r\n finalPrice = purchasePrice - appliedPromoCode.discountAmount;\r\n }\r\n }\r\n\r\n finalPrice = finalPrice + tax;\r\n\r\n return Math.max(0, finalPrice);\r\n }\r\n\r\n static async Get(id: number) {\r\n var response = await WebClient.Get(\r\n `api/KitPurchases/Get/${id}`\r\n );\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n static async purchaseKit(\r\n kitId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n saveCreditCard: boolean,\r\n promoCode: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/KitPurchases/PurchaseKit\",\r\n {\r\n kitId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n saveCreditCard,\r\n promoCode,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async subscribeToProPremiumAndGiftKit(\r\n kitId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/KitPurchases/SubscribeToProPremiumAndGiftKit\",\r\n {\r\n kitId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async upgradeToProPremiumAndGiftKit(\r\n kitId: number,\r\n creditCardId: string,\r\n nameOnCard: string,\r\n creditCardNumber: string,\r\n cv2: string,\r\n expirationMonth: number,\r\n expirationYear: number,\r\n postalCode: string,\r\n phoneNumber: string,\r\n region?: string,\r\n country?: string\r\n ) {\r\n return await WebClient.Post(\r\n \"api/KitPurchases/UpgradeToProPremiumAndGiftKit\",\r\n {\r\n kitId,\r\n creditCardId,\r\n nameOnCard,\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalCode,\r\n phoneNumber,\r\n region,\r\n country,\r\n }\r\n );\r\n }\r\n\r\n static async validatePromoCode(promoCode: string, kitId: number) {\r\n return await WebClient.Post(\r\n \"api/KitPurchases/ValidatePromoCode\",\r\n { promoCode, kitId }\r\n );\r\n }\r\n\r\n static roundToTwo(number: number) {\r\n return +(Math.round(+(number + \"e+2\")) + \"e-2\");\r\n }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport { ProCost, ProSubscriptionTier } from \"../../entities/ProSubscription\";\r\nimport Kit from \"../../entities/Kit\";\r\nimport KitPromoCode from \"../../entities/KitPromoCode\";\r\nimport KitPurchase from \"../../entities/KitPurchase\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport { KitPurchaseService } from \"../../services/KitPurchaseService\";\r\nimport {\r\n FieldValidationError,\r\n getParameterByName,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport \"./Kit.css\";\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n config: AppConfig;\r\n user: ApplicationUser;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n returnUrl: string;\r\n premiumSermonKit?: Kit;\r\n showGenericError: boolean;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n saveCard: boolean;\r\n creditCardType?: CreditCardType;\r\n phoneNumber: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: KitPromoCode;\r\n enableSubmit: boolean;\r\n redirectToConfirmation: boolean;\r\n redirectToSubscriptionConfirmation: boolean;\r\n upsoldToProPremium: boolean;\r\n showLearnMoreProPremiumModal: boolean;\r\n upgradeToProPremium: boolean;\r\n upgradeToProPremiumCost?: number;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n newCardPostalCodeCheck?: string;\r\n taxIsZero: boolean;\r\n};\r\n\r\nexport default class PurchasePremiumSermonKit extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n returnUrl: \"\",\r\n showGenericError: false,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n saveCard: true,\r\n phoneNumber: \"\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n enableSubmit: true,\r\n redirectToConfirmation: false,\r\n redirectToSubscriptionConfirmation: false,\r\n upsoldToProPremium: false,\r\n showLearnMoreProPremiumModal: false,\r\n upgradeToProPremium: false,\r\n upgradeToProPremiumCost: undefined,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Purchase Premium Sermon Kit\";\r\n\r\n if (this.props.hasPaypal) {\r\n this.props.history.replace(\"/feature-unavailable\");\r\n }\r\n\r\n let redirectState = this.props.location.state || {};\r\n let id = (redirectState as any).id;\r\n if (!id) {\r\n id = this.props.match.params.id;\r\n }\r\n\r\n let returnUrl = (redirectState as any).returnUrl;\r\n if (!returnUrl) {\r\n returnUrl = getParameterByName(\"returnUrl\");\r\n }\r\n\r\n let enteredPromoCode = (redirectState as any).code;\r\n if (!enteredPromoCode) {\r\n enteredPromoCode = getParameterByName(\"code\");\r\n }\r\n\r\n this.setState({\r\n returnUrl: returnUrl || \"\",\r\n enteredPromoCode: enteredPromoCode || \"\",\r\n });\r\n\r\n if (id) {\r\n const responses = await Promise.all([\r\n KitPurchaseService.Get(id),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n const [pskResult, locationResult, creditCardsResult] = responses;\r\n\r\n let premiumSermonKit = await pskResult;\r\n if (!premiumSermonKit) {\r\n this.setState({ showGenericError: true, loading: false });\r\n } else if (!premiumSermonKit.listPrice && !premiumSermonKit.salePrice) {\r\n window.location.replace(premiumSermonKit.url);\r\n } else if (!premiumSermonKit.publiclyAvailable) {\r\n window.location.replace(premiumSermonKit.url);\r\n } else if (premiumSermonKit.alreadyPurchased) {\r\n window.location.replace(premiumSermonKit.url);\r\n } else if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier >= ProSubscriptionTier.Premium\r\n ) {\r\n window.location.replace(premiumSermonKit.url);\r\n } else {\r\n this.setState({ premiumSermonKit: premiumSermonKit });\r\n\r\n if (\r\n this.props.user.proSubscription &&\r\n !this.props.user.proSubscription.inTrial &&\r\n this.props.user.proSubscription.tier < ProSubscriptionTier.Premium\r\n ) {\r\n ProSubscriptionService.getUpgradeToProPremiumCost().then((cost) => {\r\n this.setState({\r\n upgradeToProPremiumCost: cost,\r\n });\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve data to load. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n this.setState({ loading: false });\r\n }\r\n } else {\r\n this.setState({ showGenericError: true, loading: false });\r\n }\r\n }\r\n\r\n handleCheckTaxFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n if (this.state.newCardPostalCodeCheck) {\r\n this.setState({ enableSubmit: false });\r\n var price =\r\n KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.premiumSermonKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n this.state.newCardPostalCodeCheck,\r\n false,\r\n +price\r\n );\r\n\r\n this.setState({ enableSubmit: true, errors: [] });\r\n\r\n if (taxRequest == null) {\r\n const error = {\r\n field: \"TaxCheck\",\r\n errors: [\r\n \"There was an error calculating tax, please check postal code and try again.\",\r\n ],\r\n };\r\n this.setState({\r\n errors: [error],\r\n enableSubmit: true,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n });\r\n } else {\r\n this.setState({ taxAmount: taxRequest, taxIsZero: taxRequest === 0 });\r\n }\r\n }\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response = null;\r\n if (!this.state.upsoldToProPremium && !this.state.upgradeToProPremium) {\r\n response = await KitPurchaseService.purchaseKit(\r\n this.state.premiumSermonKit!.id,\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.saveCard,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.redirectState = {\r\n premiumSermonKit: this.state.premiumSermonKit,\r\n premiumSermonKitPurchase: response.data,\r\n returnUrl: this.state.returnUrl,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n return;\r\n }\r\n } else if (this.state.upsoldToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await KitPurchaseService.subscribeToProPremiumAndGiftKit(\r\n this.state.premiumSermonKit!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n premiumSermonKit: this.state.premiumSermonKit,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n } else if (this.state.upgradeToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await KitPurchaseService.upgradeToProPremiumAndGiftKit(\r\n this.state.premiumSermonKit!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n premiumSermonKit: this.state.premiumSermonKit,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response!.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await this.validatePromoCode();\r\n };\r\n\r\n checkTax = async (postalCode: string) => {\r\n var price =\r\n KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.premiumSermonKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(postalCode, false, +price);\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n const response = await KitPurchaseService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n this.state.premiumSermonKit!.id\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () =>\r\n this.checkTax(\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm &&\r\n this.state.newCardPostalCodeCheck\r\n ? this.state.newCardPostalCodeCheck\r\n : this.state.postalCode\r\n )\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n removePromoCode = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n this.setState({\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n });\r\n };\r\n\r\n render() {\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.redirectToSubscriptionConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.loading) {\r\n return (\r\n \r\n );\r\n } else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
\r\n Please contact our{\" \"}\r\n \r\n customer service\r\n {\" \"}\r\n team for help.\r\n
\r\n
\r\n
\r\n );\r\n } else if (this.state.premiumSermonKit) {\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n if (!defaultCard) {\r\n defaultCard =\r\n this.state.existingCreditCards.length > 0\r\n ? this.state.existingCreditCards[0]\r\n : undefined;\r\n }\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n \r\n Your default card will be updated to the card\r\n you selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n )}\r\n\r\n {!this.props.user.proSubscription && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.props.user.proSubscription &&\r\n !this.props.user.proSubscription.inTrial &&\r\n this.props.user.proSubscription.tier <\r\n ProSubscriptionTier.Premium && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.state.showLearnMoreProPremiumModal && (\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n e.stopPropagation()}\r\n >\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n x\r\n \r\n
\r\n

\r\n \r\n With a Premium PRO Membership you will receive:\r\n \r\n

\r\n
    \r\n
  • Access to all Premium Sermon Series and Premium Sermon Kits
  • \r\n
  • Over 800 video illustrations
  • \r\n
  • Over 750 preaching slides
  • \r\n
  • Over 40 worship music videos
  • \r\n
  • Over 40 countdown, service starters
  • \r\n
  • Over 350 motion backgrounds
  • \r\n
  • Over 700 still backgrounds
  • \r\n
  • Over 1,000 royalty-free images
  • \r\n
  • Access top rated illustrations
  • \r\n
  • View sermons on a single page
  • \r\n
  • Download sermons as a PDF
  • \r\n
  • Lectionary calendar sermon search
  • \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n\r\n \r\n {this.state.enableSubmit &&\r\n !this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && <>PURCHASE}\r\n {this.state.enableSubmit &&\r\n (this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && <>SUBSCRIBE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Selected Premium Sermon Kit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {!this.state.appliedPromoCode && (\r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n )}\r\n\r\n {this.state.appliedPromoCode && (\r\n
\r\n Promo applied:\r\n  \r\n \r\n {this.state.appliedPromoCode.code}\r\n \r\n    \r\n \r\n x\r\n \r\n
\r\n )}\r\n \r\n )}\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n \r\n
\r\n \r\n this.setState({\r\n newCardPostalCodeCheck: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Check Tax\r\n \r\n
\r\n
\r\n No tax for this postal code\r\n
\r\n \r\n
\r\n \r\n Taxes may apply to this purchase, enter your postal\r\n code to check.\r\n \r\n \r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n Total (USD)\r\n FREE\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {this.state.taxAmount > 0 && (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n Subtotal\r\n \r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.premiumSermonKit!,\r\n 0,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Tax\r\n \r\n {this.state.taxAmount}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Total (USD)\r\n \r\n $\r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.premiumSermonKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n \r\n )}\r\n {this.state.taxAmount === 0 && (\r\n
\r\n Total (USD)$\r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.premiumSermonKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n
\r\n\r\n {this.state.upsoldToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n ${ProCost.premium}/yr with full media access + all Premium Sermon Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically unless you cancel prior to renewal. We may\r\n contact you with important information regarding your PRO\r\n subscription. Standard data fees and text messaging rates\r\n may apply based on your plan with your mobile phone\r\n carrier.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n {this.state.upgradeToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n $\r\n {this.state.upgradeToProPremiumCost\r\n ? this.state.upgradeToProPremiumCost\r\n : ProCost.premium}{\" \"}\r\n with full media access + all Premium Sermon Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically at ${ProCost.premium}/yr unless you cancel prior to\r\n renewal.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from\r\n our registration page to our secure servers encrypted for\r\n your protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport Kit from '../../entities/Kit';\r\nimport KitPurchase from '../../entities/KitPurchase';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n premiumSermonKit?: Kit;\r\n premiumSermonKitPurchase?: KitPurchase;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchasePremiumSermonKitConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Purchase Premium Sermon Kit Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n premiumSermonKit: (redirectState as any).premiumSermonKit,\r\n premiumSermonKitPurchase: (redirectState as any).premiumSermonKitPurchase\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n const premiumSermonKit = this.state.premiumSermonKit!;\r\n const premiumSermonKitPurchase = this.state.premiumSermonKitPurchase!;\r\n const user = this.props.user;\r\n \r\n window.dataLayer.push({\r\n 'event':'orderComplete',\r\n 'orderValue': premiumSermonKitPurchase.purchasePrice,\r\n 'orderCurrency': user.currency || \"USD\",\r\n 'orderId': premiumSermonKitPurchase.orderId, \r\n 'ecData': { 'email': user.email, \"phone_number\": user.phoneNumber?.replace(/\\D/g, \"\")}\r\n });\r\n\r\n if ('gtag' in window) {\r\n\r\n window.gaItem = {\r\n \"id\": premiumSermonKit.id,\r\n \"name\": premiumSermonKit.name,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"Premium Sermon Kit\",\r\n \"quantity\": \"1\",\r\n \"price\": premiumSermonKitPurchase.purchasePrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": premiumSermonKitPurchase.orderId,\r\n \"affiliation\": \"Payments Digital Download\",\r\n \"value\": premiumSermonKitPurchase.purchasePrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for your purchase!

\r\n
\r\n Return to SermonCentral to download your Premium Sermon Kit, or print a receipt for your records.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport Kit from '../../entities/Kit';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n premiumSermonKit?: Kit;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchasePremiumSermonKitSubscriptionConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Premium Sermon Kit Subscription Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n premiumSermonKit: (redirectState as any).premiumSermonKit\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n\r\n if ('gtag' in window) {\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? \"\";\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": planName,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ]\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for signing up for SermonCentral PRO!

\r\n
\r\n Return to SermonCentral to download your premium sermon kit and use other PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport { ProCost, ProSubscriptionTier } from \"../../entities/ProSubscription\";\r\nimport Kit from \"../../entities/Kit\";\r\nimport KitPromoCode from \"../../entities/KitPromoCode\";\r\nimport KitPurchase from \"../../entities/KitPurchase\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport { KitPurchaseService } from \"../../services/KitPurchaseService\";\r\nimport {\r\n FieldValidationError,\r\n getParameterByName,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport \"./Kit.css\";\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n config: AppConfig;\r\n user: ApplicationUser;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n returnUrl: string;\r\n sermonSeriesKit?: Kit;\r\n showGenericError: boolean;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n saveCard: boolean;\r\n creditCardType?: CreditCardType;\r\n phoneNumber: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: KitPromoCode;\r\n enableSubmit: boolean;\r\n redirectToConfirmation: boolean;\r\n redirectToSubscriptionConfirmation: boolean;\r\n upsoldToProPremium: boolean;\r\n showLearnMoreProPremiumModal: boolean;\r\n upgradeToProPremium: boolean;\r\n upgradeToProPremiumCost?: number;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n newCardPostalCodeCheck?: string;\r\n taxIsZero: boolean;\r\n};\r\n\r\nexport default class PurchasesermonSeriesKit extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n returnUrl: \"\",\r\n showGenericError: false,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n saveCard: true,\r\n phoneNumber: \"\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n enableSubmit: true,\r\n redirectToConfirmation: false,\r\n redirectToSubscriptionConfirmation: false,\r\n upsoldToProPremium: false,\r\n showLearnMoreProPremiumModal: false,\r\n upgradeToProPremium: false,\r\n upgradeToProPremiumCost: undefined,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Purchase Sermon Series Kit\";\r\n\r\n if (this.props.hasPaypal) {\r\n this.props.history.replace(\"/feature-unavailable\");\r\n }\r\n\r\n let redirectState = this.props.location.state || {};\r\n let id = (redirectState as any).id;\r\n if (!id) {\r\n id = this.props.match.params.id;\r\n }\r\n\r\n let returnUrl = (redirectState as any).returnUrl;\r\n if (!returnUrl) {\r\n returnUrl = getParameterByName(\"returnUrl\");\r\n }\r\n\r\n let enteredPromoCode = (redirectState as any).code;\r\n if (!enteredPromoCode) {\r\n enteredPromoCode = getParameterByName(\"code\");\r\n }\r\n\r\n this.setState({\r\n returnUrl: returnUrl || \"\",\r\n enteredPromoCode: enteredPromoCode || \"\",\r\n });\r\n\r\n if (id) {\r\n const responses = await Promise.all([\r\n KitPurchaseService.Get(id),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n const [sskResult, locationResult, creditCardsResult] = responses;\r\n\r\n let sermonSeriesKit = await sskResult;\r\n if (!sermonSeriesKit) {\r\n this.setState({ showGenericError: true, loading: false });\r\n } else if (!sermonSeriesKit.listPrice && !sermonSeriesKit.salePrice) {\r\n window.location.replace(sermonSeriesKit.url);\r\n } else if (!sermonSeriesKit.publiclyAvailable) {\r\n window.location.replace(sermonSeriesKit.url);\r\n } else if (sermonSeriesKit.alreadyPurchased) {\r\n window.location.replace(sermonSeriesKit.url);\r\n } else if (\r\n this.props.user.proSubscription &&\r\n this.props.user.proSubscription.tier >= ProSubscriptionTier.Premium\r\n ) {\r\n window.location.replace(sermonSeriesKit.url);\r\n } else {\r\n this.setState({ sermonSeriesKit: sermonSeriesKit });\r\n\r\n if (\r\n this.props.user.proSubscription &&\r\n !this.props.user.proSubscription.inTrial &&\r\n this.props.user.proSubscription.tier < ProSubscriptionTier.Premium\r\n ) {\r\n ProSubscriptionService.getUpgradeToProPremiumCost().then((cost) => {\r\n this.setState({\r\n upgradeToProPremiumCost: cost,\r\n });\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve data to load. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n this.setState({ loading: false });\r\n }\r\n } else {\r\n this.setState({ showGenericError: true, loading: false });\r\n }\r\n }\r\n\r\n handleCheckTaxFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n if (this.state.newCardPostalCodeCheck) {\r\n this.setState({ enableSubmit: false });\r\n var price =\r\n KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.sermonSeriesKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n this.state.newCardPostalCodeCheck,\r\n false,\r\n +price\r\n );\r\n\r\n this.setState({ enableSubmit: true, errors: [] });\r\n\r\n if (taxRequest == null) {\r\n const error = {\r\n field: \"TaxCheck\",\r\n errors: [\r\n \"There was an error calculating tax, please check postal code and try again.\",\r\n ],\r\n };\r\n this.setState({\r\n errors: [error],\r\n enableSubmit: true,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n });\r\n } else {\r\n this.setState({ taxAmount: taxRequest, taxIsZero: taxRequest === 0 });\r\n }\r\n }\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response = null;\r\n if (!this.state.upsoldToProPremium && !this.state.upgradeToProPremium) {\r\n response = await KitPurchaseService.purchaseKit(\r\n this.state.sermonSeriesKit!.id,\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.saveCard,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.redirectState = {\r\n sermonSeriesKit: this.state.sermonSeriesKit,\r\n sermonSeriesKitPurchase: response.data,\r\n returnUrl: this.state.returnUrl,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n return;\r\n }\r\n } else if (this.state.upsoldToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await KitPurchaseService.subscribeToProPremiumAndGiftKit(\r\n this.state.sermonSeriesKit!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n sermonSeriesKit: this.state.sermonSeriesKit,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n } else if (this.state.upgradeToProPremium) {\r\n if (this.state.phoneNumber.trim().length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PhoneNumber\",\r\n errors: [\"Phone number cannot be empty\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n response =\r\n await KitPurchaseService.upgradeToProPremiumAndGiftKit(\r\n this.state.sermonSeriesKit!.id,\r\n !this.state.showUseNewCardForm\r\n ? this.state.selectedCreditCardId\r\n : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n sermonSeriesKit: this.state.sermonSeriesKit,\r\n returnUrl: this.state.returnUrl,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectToSubscriptionConfirmation: true,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response!.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await this.validatePromoCode();\r\n };\r\n\r\n checkTax = async (postalCode: string) => {\r\n var price =\r\n KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.sermonSeriesKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(postalCode, false, +price);\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n const response = await KitPurchaseService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n this.state.sermonSeriesKit!.id\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () =>\r\n this.checkTax(\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm &&\r\n this.state.newCardPostalCodeCheck\r\n ? this.state.newCardPostalCodeCheck\r\n : this.state.postalCode\r\n )\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n removePromoCode = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n this.setState({\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n });\r\n };\r\n\r\n render() {\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.redirectToSubscriptionConfirmation) {\r\n return (\r\n \r\n );\r\n } else if (this.state.loading) {\r\n return (\r\n \r\n );\r\n } else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
\r\n Please contact our{\" \"}\r\n \r\n customer service\r\n {\" \"}\r\n team for help.\r\n
\r\n
\r\n
\r\n );\r\n } else if (this.state.sermonSeriesKit) {\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n if (!defaultCard) {\r\n defaultCard =\r\n this.state.existingCreditCards.length > 0\r\n ? this.state.existingCreditCards[0]\r\n : undefined;\r\n }\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n \r\n Your default card will be updated to the card\r\n you selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(\r\n e.target.value,\r\n 10\r\n ),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) &&\r\n this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n )}\r\n\r\n {!this.props.user.proSubscription && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.props.user.proSubscription &&\r\n !this.props.user.proSubscription.inTrial &&\r\n this.props.user.proSubscription.tier <\r\n ProSubscriptionTier.Premium && (\r\n <>\r\n
\r\n
\r\n \r\n {\r\n e.preventDefault();\r\n this.setState({\r\n showLearnMoreProPremiumModal: true,\r\n });\r\n }}\r\n >\r\n Learn more about this offer\r\n \r\n
\r\n
\r\n \r\n )}\r\n\r\n {this.state.showLearnMoreProPremiumModal && (\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n e.stopPropagation()}\r\n >\r\n {\r\n this.setState({\r\n showLearnMoreProPremiumModal: false,\r\n });\r\n }}\r\n >\r\n x\r\n \r\n
\r\n

\r\n \r\n With a Premium PRO Membership you will receive:\r\n \r\n

\r\n
    \r\n
  • Access to all Premium Sermon Series And Premium Sermon Kits
  • \r\n
  • Over 800 video illustrations
  • \r\n
  • Over 750 preaching slides
  • \r\n
  • Over 40 worship music videos
  • \r\n
  • Over 40 countdown, service starters
  • \r\n
  • Over 350 motion backgrounds
  • \r\n
  • Over 700 still backgrounds
  • \r\n
  • Over 1,000 royalty-free images
  • \r\n
  • Access top rated illustrations
  • \r\n
  • View sermons on a single page
  • \r\n
  • Download sermons as a PDF
  • \r\n
  • Lectionary calendar sermon search
  • \r\n
\r\n
\r\n
\r\n
\r\n )}\r\n\r\n \r\n {this.state.enableSubmit &&\r\n !this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && <>PURCHASE}\r\n {this.state.enableSubmit &&\r\n (this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && <>SUBSCRIBE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Selected Sermon Series Kit\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {!this.state.appliedPromoCode && (\r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n )}\r\n\r\n {this.state.appliedPromoCode && (\r\n
\r\n Promo applied:\r\n  \r\n \r\n {this.state.appliedPromoCode.code}\r\n \r\n    \r\n \r\n x\r\n \r\n
\r\n )}\r\n \r\n )}\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n \r\n
\r\n \r\n this.setState({\r\n newCardPostalCodeCheck: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Check Tax\r\n \r\n
\r\n
\r\n No tax for this postal code\r\n
\r\n \r\n
\r\n \r\n Taxes may apply to this purchase, enter your postal\r\n code to check.\r\n \r\n \r\n )}\r\n {(this.state.upsoldToProPremium ||\r\n this.state.upgradeToProPremium) && (\r\n
\r\n Total (USD)\r\n FREE\r\n
\r\n )}\r\n {!this.state.upsoldToProPremium &&\r\n !this.state.upgradeToProPremium && (\r\n <>\r\n {this.state.taxAmount > 0 && (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n Subtotal\r\n \r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.sermonSeriesKit!,\r\n 0,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Tax\r\n \r\n {this.state.taxAmount}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Total (USD)\r\n \r\n $\r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.sermonSeriesKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n
\r\n \r\n )}\r\n {this.state.taxAmount === 0 && (\r\n
\r\n Total (USD)$\r\n {KitPurchaseService.GetPriceIncludingDiscountAndTax(\r\n this.state.sermonSeriesKit!,\r\n this.state.taxAmount,\r\n this.state.appliedPromoCode\r\n ).toFixed(2)}\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n
\r\n\r\n {this.state.upsoldToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n ${ProCost.premium}/yr with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically unless you cancel prior to renewal. We may\r\n contact you with important information regarding your PRO\r\n subscription. Standard data fees and text messaging rates\r\n may apply based on your plan with your mobile phone\r\n carrier.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n {this.state.upgradeToProPremium && (\r\n
\r\n
\r\n
\r\n Selected PRO Plan\r\n
\r\n
\r\n
\r\n PRO Premium - \r\n \r\n \r\n $\r\n {this.state.upgradeToProPremiumCost\r\n ? this.state.upgradeToProPremiumCost\r\n : ProCost.premium}{\" \"}\r\n with full media access + all Sermon Series Kits\r\n \r\n \r\n

\r\n Please note that your subscription will renew\r\n automatically at ${ProCost.premium}/yr unless you cancel prior to\r\n renewal.\r\n

\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from\r\n our registration page to our secure servers encrypted for\r\n your protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport Kit from '../../entities/Kit';\r\nimport KitPurchase from '../../entities/KitPurchase';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n sermonSeriesKit?: Kit;\r\n sermonSeriesKitPurchase?: KitPurchase;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchaseSermonSeriesKitConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Purchase Sermon Series Kit Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n sermonSeriesKit: (redirectState as any).sermonSeriesKit,\r\n sermonSeriesKitPurchase: (redirectState as any).sermonSeriesKitPurchase\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n const sermonSeriesKit = this.state.sermonSeriesKit!;\r\n const sermonSeriesKitPurchase = this.state.sermonSeriesKitPurchase!;\r\n const user = this.props.user;\r\n \r\n window.dataLayer.push({\r\n 'event':'orderComplete',\r\n 'orderValue': sermonSeriesKitPurchase.purchasePrice,\r\n 'orderCurrency': user.currency || \"USD\",\r\n 'orderId': sermonSeriesKitPurchase.orderId, \r\n 'ecData': { 'email': user.email, \"phone_number\": user.phoneNumber?.replace(/\\D/g, \"\")}\r\n });\r\n\r\n if ('gtag' in window) {\r\n\r\n window.gaItem = {\r\n \"id\": sermonSeriesKit.id,\r\n \"name\": sermonSeriesKit.name,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"Sermon Series Kit\",\r\n \"quantity\": \"1\",\r\n \"price\": sermonSeriesKitPurchase.purchasePrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": sermonSeriesKitPurchase.orderId,\r\n \"affiliation\": \"Payments Digital Download\",\r\n \"value\": sermonSeriesKitPurchase.purchasePrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for your purchase!

\r\n
\r\n Return to SermonCentral to download your Sermon Series Kit, or print a receipt for your records.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\nimport Kit from '../../entities/Kit';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n sermonSeriesKit?: Kit;\r\n redirectToPurchase: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class PurchaseSermonSeriesKitSubscriptionConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToPurchase: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Sermon Series Kit Subscription Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToPurchase: true\r\n });\r\n }\r\n else {\r\n\r\n this.setState({\r\n sermonSeriesKit: (redirectState as any).sermonSeriesKit\r\n });\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n\r\n if ('gtag' in window) {\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? \"\";\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": proSubscription?.planName,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ]\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n\r\n }\r\n }\r\n render() {\r\n\r\n if (this.state.redirectToPurchase) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for signing up for SermonCentral PRO!

\r\n
\r\n Return to SermonCentral to download your sermon series kit and use other PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus, ProSubscriptionTier } from '../../entities/ProSubscription';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectToSubscribe: boolean;\r\n};\r\n\r\nexport default class SubscribeAlreadyAMember extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToSubscribe: false\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Already a Member\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState || !this.props.user.proSubscription) {\r\n this.setState({\r\n redirectToSubscribe: true\r\n });\r\n }\r\n\r\n this.redirectState = redirectState;\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToSubscribe) {\r\n return ;\r\n }\r\n\r\n const proSubscription = this.props.user.proSubscription;\r\n\r\n return (\r\n
\r\n\r\n
\r\n
\r\n
\r\n

Already a Member

\r\n
\r\n It looks like you've already got a SermonCentral PRO membership.\r\n {proSubscription?.term !== ProSubscriptionTerm.None && proSubscription?.status === ProSubscriptionStatus.Active &&\r\n <> Click here to manage your subscription to SermonCentral PRO {ProSubscriptionTier[proSubscription.tier]}.\r\n }\r\n {proSubscription?.term === ProSubscriptionTerm.None && !proSubscription.serviceStopDate &&\r\n <> As a Site Administrator, you've got access to PRO Premium that will never expire.\r\n }\r\n {proSubscription?.term === ProSubscriptionTerm.None && proSubscription.serviceStopDate &&\r\n <> Your Free Contributor PRO doesn't expire until {new Date(proSubscription.serviceStopDate).toLocaleDateString()}.\r\n }\r\n {proSubscription?.serviceStopDate && proSubscription.status !== ProSubscriptionStatus.Active &&\r\n <> Even though your subscription has been canceled, your benefits will not expire until {new Date(proSubscription.serviceStopDate).toLocaleDateString()}.\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\n\r\nimport { FieldValidationError, ServerResponse, ServerModelValidationResponse } from '../../services/ServiceHelper';\r\n\r\nimport { AuthenticationService } from '../../services/AuthenticationService';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n enableSubmit: boolean;\r\n email: string;\r\n password: string;\r\n redirectToSubscribe: boolean;\r\n errors: FieldValidationError[];\r\n};\r\n\r\nexport default class SubscribeAuthChallenge extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n enableSubmit: true,\r\n email: '',\r\n password: '',\r\n redirectToSubscribe: false,\r\n errors: []\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Auth Challenge\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected\r\n // and aren't signed in, so redirect back to /subscribe\r\n if (!redirectState || this.props.user) {\r\n this.setState({\r\n redirectToSubscribe: true\r\n });\r\n }\r\n else {\r\n const email = (redirectState as any).email;\r\n delete (redirectState as any).email;\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n email: email\r\n });\r\n }\r\n }\r\n\r\n async handleFormSubmit(e: React.FormEvent) {\r\n\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.email && this.state.password) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n const response = await AuthenticationService.signIn(this.state.email, this.state.password, false, 'AuthChallenge');\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.setState({ redirectToSubscribe: true });\r\n }\r\n else if (ServerModelValidationResponse.isServerModelValidationResponse(response)) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n }\r\n else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = { field: \"\", errors: [response.message] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n else {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n catch (errorResult) {\r\n const serverError: FieldValidationError = { field: \"\", errors: ['An unknown error occurred. Please try again.'] };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToSubscribe) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) &&\r\n
\r\n }\r\n
\r\n
\r\n
this.handleFormSubmit(e)}>\r\n
\r\n
\r\n
Sign In to SermonCentral
\r\n
\r\n
\r\n

To make changes to your account, please confirm your identity by signing in.

\r\n
\r\n \r\n this.setState({ email: e.target.value })} />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ password: e.target.value })} />\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","declare const gtag: (command: string, commandParameters?: any, additionalConfigInfo?: any) => any;\r\n\r\nexport class GTag {\r\n static event(action: string, detail: EventDetail) {\r\n let windowObject: any = window;\r\n if (windowObject.gtag) {\r\n gtag(\"event\", action, detail);\r\n }\r\n }\r\n}\r\n\r\nexport interface EventDetail {\r\n event_category: string;\r\n event_label?: string;\r\n value?: number;\r\n}\r\n","import { GTag } from \"./GoogleAnalytics\";\r\n\r\nexport class EventTracking {\r\n static CreateFullAccountSinglePage = {\r\n onPageLoad() {\r\n GTag.event(\"Page\", {\r\n event_category: \"Create Full Account\",\r\n event_label: \"Viewed\",\r\n });\r\n },\r\n onSelectPlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Create Full Account\",\r\n event_label: `Selected ${planName}`,\r\n });\r\n },\r\n onChangePlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Create Full Account\",\r\n event_label: `Changed to ${planName}`,\r\n });\r\n },\r\n onPromoCodeLinkClick() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Create Full Account\",\r\n event_label: \"Link Clicked\",\r\n });\r\n },\r\n onPromoCodeSubmitted() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Create Full Account\",\r\n event_label: \"Promocode submitted\",\r\n });\r\n },\r\n onAccountCreated() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Create Full Account\",\r\n event_label: \"Account created\",\r\n });\r\n },\r\n onBillingInfoSubmitted() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Create Full Account\",\r\n event_label: \"Billing Info Submitted\",\r\n });\r\n },\r\n };\r\n\r\n static CreateFullAccountQuickSetup = {\r\n onPageLoad() {\r\n GTag.event(\"Page\", {\r\n event_category: \"Quick Setup\",\r\n event_label: \"Viewed\",\r\n });\r\n },\r\n onSelectPlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Quick Setup\",\r\n event_label: `Selected ${planName}`,\r\n });\r\n },\r\n onChangePlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Quick Setup\",\r\n event_label: `Changed to ${planName}`,\r\n });\r\n },\r\n onPromoCodeLinkClick() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Quick Setup\",\r\n event_label: \"Link Clicked\",\r\n });\r\n },\r\n onPromoCodeSubmitted() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Quick Setup\",\r\n event_label: \"Promocode submitted\",\r\n });\r\n },\r\n onAccountCreated() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Quick Setup\",\r\n event_label: \"Account created\",\r\n });\r\n },\r\n onBillingInfoSubmitted() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Quick Setup\",\r\n event_label: \"Billing Info Submitted\",\r\n });\r\n },\r\n };\r\n\r\n static CreateEmbedAccountQuickSetup = {\r\n onPageLoad() {\r\n GTag.event(\"Page\", {\r\n event_category: \"Embed Setup\",\r\n event_label: \"Viewed\",\r\n });\r\n },\r\n onSelectPlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Embed Setup\",\r\n event_label: `Selected ${planName}`,\r\n });\r\n },\r\n onChangePlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Embed Setup\",\r\n event_label: `Changed to ${planName}`,\r\n });\r\n },\r\n onPromoCodeLinkClick() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Embed Setup\",\r\n event_label: \"Link Clicked\",\r\n });\r\n },\r\n onPromoCodeSubmitted() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Embed Setup\",\r\n event_label: \"Promocode submitted\",\r\n });\r\n },\r\n onAccountCreated() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Embed Setup\",\r\n event_label: \"Account created\",\r\n });\r\n },\r\n onBillingInfoSubmitted() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Embed Setup\",\r\n event_label: \"Billing Info Submitted\",\r\n });\r\n },\r\n };\r\n\r\n static CreateAccount = {\r\n onPageLoad() {\r\n GTag.event(\"Page\", {\r\n event_category: \"Create Account\",\r\n event_label: \"Viewed\",\r\n });\r\n },\r\n onSelectPlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Create Account\",\r\n event_label: `Selected ${planName}`,\r\n });\r\n },\r\n onChangePlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Create Account\",\r\n event_label: `Changed to ${planName}`,\r\n });\r\n },\r\n onPromoCodeLinkClick() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Create Account\",\r\n event_label: \"Link Clicked\",\r\n });\r\n },\r\n onPromoCodeSubmitted() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Create Account\",\r\n event_label: \"Promocode submitted\",\r\n });\r\n },\r\n onAccountCreated() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Create Account\",\r\n event_label: \"Account created\",\r\n });\r\n },\r\n };\r\n\r\n static BillingInfo = {\r\n onPageLoad() {\r\n GTag.event(\"Page\", {\r\n event_category: \"Billing Info\",\r\n event_label: \"Viewed\",\r\n });\r\n },\r\n onSelectPlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Billing Info\",\r\n event_label: `Selected ${planName}`,\r\n });\r\n },\r\n onChangePlan(planName: string) {\r\n GTag.event(\"Plan\", {\r\n event_category: \"Billing Info\",\r\n event_label: `Changed to ${planName}`,\r\n });\r\n },\r\n onPromoCodeLinkClick() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Billing Info\",\r\n event_label: \"Link Clicked\",\r\n });\r\n },\r\n onPromoCodeSubmitted() {\r\n GTag.event(\"Promocode\", {\r\n event_category: \"Billing Info\",\r\n event_label: \"Promocode submitted\",\r\n });\r\n },\r\n onBillingInfoSubmitted() {\r\n GTag.event(\"Account\", {\r\n event_category: \"Billing Info\",\r\n event_label: \"Account created\",\r\n });\r\n },\r\n };\r\n}\r\n","export const ProPlanIdDetermination = {\r\n getProPlanNameById: (pre_selected_plan: string) => {\r\n let selectedProPlanName = \"\";\r\n if (\r\n pre_selected_plan === \"Monthly_Pro_Plan\" ||\r\n pre_selected_plan === \"Monthly Pro Product\"\r\n ) {\r\n selectedProPlanName = \"MonthlyPlus\";\r\n } else if (\r\n pre_selected_plan === \"Premium_Pro_Plan\" ||\r\n pre_selected_plan === \"Premium Pro Product\"\r\n ) {\r\n selectedProPlanName = \"AnnualPremium\";\r\n } else if (\r\n pre_selected_plan === \"Basic_Pro_Plan\" ||\r\n pre_selected_plan === \"Basic Pro Product\"\r\n ) {\r\n selectedProPlanName = \"AnnualBasic\";\r\n } else if (\r\n pre_selected_plan === \"Annual_Pro_Plan\" ||\r\n pre_selected_plan === \"Annual Pro Product\"\r\n ) {\r\n selectedProPlanName = \"AnnualPlus\";\r\n }\r\n\r\n return selectedProPlanName;\r\n },\r\n};\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport ProSubscriptionPromoCode from \"../../entities/ProSubscriptionPromoCode\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport { EventTracking } from \"../../utilities/EventTracking\";\r\nimport { ProPlanIdDetermination } from \"../../utilities/ProPlanIdDetermination\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n hasPaypal: boolean;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n proPlans: ProPlan[];\r\n redirectToSubscribe: boolean;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n phoneNumber: string;\r\n hidePhoneNumberCapture: boolean;\r\n creditCardType?: CreditCardType;\r\n selectedProPlanId: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: ProSubscriptionPromoCode;\r\n enableSubmit: boolean;\r\n redirectToConfirmation: boolean;\r\n cameFromCreateAccount: boolean;\r\n promoCodeCollapsed: boolean;\r\n excludeTrial: boolean;\r\n showPayPalOption: boolean;\r\n proSubscriptionSelectionExpanded: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxIsZero: boolean;\r\n taxAmount: number;\r\n newCardPostalCodeCheck?: string;\r\n};\r\n\r\nexport default class SubscribeBillingInfo extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n dataLayer = ((window as any).dataLayer = (window as any).dataLayer || []);\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n proPlans: [],\r\n redirectToSubscribe: false,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n phoneNumber: \"\",\r\n hidePhoneNumberCapture: false,\r\n selectedProPlanId: \"AnnualPlus\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n enableSubmit: true,\r\n redirectToConfirmation: false,\r\n cameFromCreateAccount: false,\r\n promoCodeCollapsed: true,\r\n excludeTrial: false,\r\n showPayPalOption: false,\r\n proSubscriptionSelectionExpanded: false,\r\n countries: [],\r\n showCountries: false,\r\n taxIsZero: false,\r\n taxAmount: 0,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Billing Info\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // This scenario happens if user signed up internationally using paypal(NOT PHP) then they cancelled and are wanting to activate again. We don't support changing gateways via payments yet and it has to be done manually.\r\n if (this.props.hasPaypal) {\r\n this.props.history.replace(\"/feature-unavailable\");\r\n }\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected,\r\n // so redirect back to /subscribe\r\n if (!redirectState) {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n } else if (this.props.user.currency && this.props.user.currency !== \"USD\") {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n } else {\r\n const phoneNumber = (redirectState as any).phoneNumber || \"\";\r\n const hidePhoneNumberCapture =\r\n (redirectState as any).hidePhoneNumberCapture || false;\r\n let selectedProPlanId =\r\n (redirectState as any).selectedProPlanId || \"AnnualPlus\";\r\n let enteredPromoCode = (redirectState as any).utm_promo || \"\";\r\n let cameFromCreateAccount =\r\n (redirectState as any).cameFromCreateAccount || false;\r\n let showPayPalOption = (redirectState as any).paypal || false;\r\n\r\n if (!enteredPromoCode) {\r\n enteredPromoCode = (redirectState as any).enteredPromoCode || \"\";\r\n }\r\n\r\n if ((redirectState as any).pre_selected_plan) {\r\n selectedProPlanId = ProPlanIdDetermination.getProPlanNameById(\r\n (redirectState as any).pre_selected_plan\r\n );\r\n }\r\n\r\n let excludeTrial = false;\r\n if (\r\n (redirectState as any).excludeTrial &&\r\n (redirectState as any).excludeTrial === \"1\"\r\n ) {\r\n excludeTrial = true;\r\n }\r\n\r\n delete (redirectState as any).phoneNumber;\r\n delete (redirectState as any).hidePhoneNumberCapture;\r\n delete (redirectState as any).pre_selected_plan;\r\n delete (redirectState as any).utm_promo;\r\n delete (redirectState as any).excludeTrial;\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n phoneNumber: phoneNumber,\r\n hidePhoneNumberCapture: hidePhoneNumberCapture,\r\n selectedProPlanId: selectedProPlanId,\r\n proSubscriptionSelectionExpanded: selectedProPlanId.length === 0,\r\n enteredPromoCode: enteredPromoCode,\r\n cameFromCreateAccount: cameFromCreateAccount,\r\n excludeTrial,\r\n showPayPalOption: showPayPalOption,\r\n });\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n this.setState({ loading: false });\r\n const [proPlansResult, locationResult, creditCardsResult] = responses;\r\n\r\n if (ServerResponse.isError(proPlansResult) || !proPlansResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve plans. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ proPlans: proPlansResult });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve data to load. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find((cc) => cc.useCardByDefault);\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n loading: false,\r\n });\r\n }\r\n }\r\n\r\n ProSubscriptionService.startCheckout();\r\n\r\n EventTracking.BillingInfo.onPageLoad();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ event: \"optimize.activate\" });\r\n }\r\n\r\n checkTax = async (postalCode: string) => {\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (!selectedProPlan) {\r\n selectedProPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n this.state.appliedPromoCode\r\n ).toFixed(2);\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n handleCheckTaxFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (!selectedProPlan) {\r\n selectedProPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n if (this.state.newCardPostalCodeCheck) {\r\n this.setState({ enableSubmit: false });\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n this.state.newCardPostalCodeCheck,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n this.setState({ enableSubmit: true, errors: [] });\r\n\r\n if (taxRequest == null) {\r\n const error = {\r\n field: \"TaxCheck\",\r\n errors: [\r\n \"There was an error calculating tax, please check postal code and try again.\",\r\n ],\r\n };\r\n this.setState({\r\n errors: [error],\r\n enableSubmit: true,\r\n taxAmount: 0,\r\n taxIsZero: false,\r\n });\r\n } else {\r\n this.setState({ taxAmount: taxRequest, taxIsZero: taxRequest === 0 });\r\n }\r\n }\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response;\r\n if (this.state.selectedProPlanId === \"AnnualBasic\") {\r\n response = await ProSubscriptionService.subscribeToAnnualBasic(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n } else if (\r\n this.state.selectedProPlanId === \"AnnualPlus\" ||\r\n !this.state.selectedProPlanId\r\n ) {\r\n response = await ProSubscriptionService.subscribeToAnnualPlus(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.excludeTrial,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"AnnualPremium\") {\r\n response = await ProSubscriptionService.subscribeToAnnualPremium(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"MonthlyPlus\") {\r\n response = await ProSubscriptionService.subscribeToMonthlyPlus(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.postalCode,\r\n this.state.phoneNumber,\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n }\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n EventTracking.BillingInfo.onBillingInfoSubmitted();\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n returnUrl: (this.redirectState as any).returnUrl,\r\n redirectedFromBillingInfo: true,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await this.validatePromoCode();\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n EventTracking.BillingInfo.onPromoCodeSubmitted();\r\n let proPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n if (!proPlan) {\r\n proPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\")!;\r\n }\r\n\r\n const response = await ProSubscriptionService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n proPlan.term,\r\n proPlan.tier\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () =>\r\n this.checkTax(\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm &&\r\n this.state.newCardPostalCodeCheck\r\n ? this.state.newCardPostalCodeCheck\r\n : this.state.postalCode\r\n )\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n onPlanChange(plan: ProPlan) {\r\n if (this.state.selectedProPlanId === \"\") {\r\n EventTracking.CreateAccount.onSelectPlan(`${plan.name}-${plan.id}`);\r\n } else {\r\n EventTracking.CreateAccount.onChangePlan(`${plan.name}-${plan.id}`);\r\n }\r\n\r\n this.setState(\r\n {\r\n selectedProPlanId: plan.id,\r\n proSubscriptionSelectionExpanded: false,\r\n },\r\n () => this.checkTax(this.state.postalCode)\r\n );\r\n }\r\n\r\n renderPlanEntry(plan: ProPlan) {\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n // Override from redirect\r\n if (this.state.excludeTrial === true) {\r\n trialAvailable = false;\r\n }\r\n\r\n return (\r\n
\r\n this.onPlanChange(plan)}\r\n onClick={() => this.onPlanChange(plan)}\r\n />\r\n \r\n {trialAvailable ? (\r\n Free Today \r\n ) : (\r\n {plan.name} \r\n )}\r\n \r\n {trialAvailable && {plan.preludeDescription} }$\r\n {monthlyPrice}\r\n {plan.description}\r\n {plan.postDescriptionTrial == null\r\n ? plan.postDescription.length > 0\r\n ? ` $${totalPrice}${\r\n this.state.taxAmount > 0 &&\r\n this.state.selectedProPlanId === plan.id\r\n ? ` (with tax $${this.state.taxAmount + totalPrice})`\r\n : \"\"\r\n }. ${plan.postDescription}`\r\n : this.state.taxAmount > 0 &&\r\n this.state.selectedProPlanId === plan.id\r\n ? ` (with tax $${this.state.taxAmount + totalPrice})`\r\n : \".\"\r\n : ` $${totalPrice}${\r\n this.state.taxAmount > 0 &&\r\n this.state.selectedProPlanId === plan.id\r\n ? ` (with tax $${this.state.taxAmount + totalPrice})`\r\n : \"\"\r\n }. ${plan.postDescriptionTrial}`}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToSubscribe) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.state.loading) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n {this.state.cameFromCreateAccount && (\r\n
\r\n
1
\r\n Create Account\r\n
2
\r\n Billing Info\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Billing Info\r\n
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n Saved Payment Method\r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n \r\n Your default card will be updated to the card you\r\n selected.\r\n
\r\n )}\r\n \r\n )}\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n Credit card number\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n Expiration Date\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 && (\r\n \r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n \r\n )}\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {!this.state.hidePhoneNumberCapture && (\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n )}\r\n \r\n {this.state.enableSubmit && <>SUBSCRIBE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n\r\n

\r\n Please note that your subscription will renew automatically\r\n unless you cancel prior to renewal. We may contact you with\r\n important information regarding your PRO subscription.\r\n Standard data fees and text messaging rates may apply based\r\n on your plan with your mobile phone carrier.\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Your PRO Subscription\r\n \r\n
\r\n
\r\n
\r\n {!this.state.proSubscriptionSelectionExpanded &&\r\n selectedProPlan && (\r\n <>\r\n {this.renderPlanEntry(selectedProPlan)}\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({\r\n proSubscriptionSelectionExpanded: true,\r\n });\r\n }}\r\n >\r\n (change)\r\n \r\n
\r\n \r\n )}\r\n\r\n {this.state.proSubscriptionSelectionExpanded &&\r\n this.state.proPlans.map((plan) => this.renderPlanEntry(plan))}\r\n\r\n {this.state.proSubscriptionSelectionExpanded && (\r\n <>\r\n {!this.state.appliedPromoCode &&\r\n this.state.promoCodeCollapsed && (\r\n {\r\n this.setState({ promoCodeCollapsed: false });\r\n EventTracking.BillingInfo.onPromoCodeLinkClick();\r\n }}\r\n >\r\n Apply promo code{\" \"}\r\n \r\n \r\n )}\r\n\r\n {!this.state.appliedPromoCode &&\r\n !this.state.promoCodeCollapsed && (\r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n )}\r\n \r\n )}\r\n\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n \r\n
\r\n \r\n this.setState({\r\n newCardPostalCodeCheck: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Check Tax\r\n \r\n
\r\n
\r\n No tax for this postal code\r\n
\r\n \r\n
\r\n \r\n Taxes may apply to this purchase, enter your postal code\r\n to check.\r\n \r\n \r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from our\r\n registration page to our secure servers encrypted for your\r\n protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectToSubscribe: boolean;\r\n returnUrl: string;\r\n isFromEmbed: boolean;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class SubscribeConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToSubscribe: false,\r\n returnUrl: this.props.config.mainSiteUrl,\r\n isFromEmbed: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Subscription Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /subscribe\r\n if (!redirectState || !this.props.user.proSubscription) {\r\n this.setState({\r\n redirectToSubscribe: true\r\n });\r\n return;\r\n }\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n // We could force the iframe to open links to the base, but since that is controlled by Caleb,\r\n // I would rather stay explicit and keep the decision in the page. \r\n if ((redirectState as any).redirectedFromEmbed) {\r\n this.setState({\r\n isFromEmbed: true\r\n })\r\n }\r\n\r\n setTimeout(() => {\r\n const user = this.props.user;\r\n const proSubscription = user.proSubscription;\r\n \r\n window.dataLayer.push({\r\n 'event':'orderComplete',\r\n 'orderValue': user.proSubscription?.nextBillPrice,\r\n 'orderCurrency': user.currency || \"USD\",\r\n 'orderId': user.id, \r\n 'ecData': { 'email': user.email, \"phone_number\": user.phoneNumber?.replace(/\\D/g, \"\")}\r\n });\r\n \r\n\r\n if ('gtag' in window) {\r\n let currencyFromLocalStorage = localStorage.getItem('currency');\r\n const planName = proSubscription?.planName ?? '';\r\n \r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": planName,\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": proSubscription?.nextBillPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.nextBillPrice,\r\n \"currency\": this.props.user.currency || \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToSubscribe) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for signing up for SermonCentral PRO!

\r\n
\r\n Return to SermonCentral to use PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport * as React from \"react\";\r\nimport { Link, Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport ProSubscriptionPromoCode from \"../../entities/ProSubscriptionPromoCode\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { AuthenticationService } from \"../../services/AuthenticationService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { EventTracking } from \"../../utilities/EventTracking\";\r\nimport { ProPlanIdDetermination } from \"../../utilities/ProPlanIdDetermination\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n proPlans: ProPlan[];\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n phoneNumber: string;\r\n password: string;\r\n agreeToTerms: boolean;\r\n selectedProPlanId: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: ProSubscriptionPromoCode;\r\n redirectToSubscribe: boolean;\r\n enableSubmit: boolean;\r\n errors: FieldValidationError[];\r\n passwordStrengthWidth: string;\r\n passwordStrengthClass: string;\r\n passwordStrengthLabel: string;\r\n promoCodeCollapsed: boolean;\r\n excludeTrial: boolean;\r\n proSubscriptionSelectionExpanded: boolean;\r\n};\r\n\r\nexport default class SubscribeCreateAccount extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n dataLayer = ((window as any).dataLayer = (window as any).dataLayer || []);\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n proPlans: [],\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n phoneNumber: \"\",\r\n password: \"\",\r\n agreeToTerms: false,\r\n selectedProPlanId: \"AnnualPlus\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n redirectToSubscribe: false,\r\n enableSubmit: true,\r\n errors: [],\r\n passwordStrengthWidth: \"0%\",\r\n passwordStrengthClass: \"\",\r\n passwordStrengthLabel: \"6-25 characters\",\r\n promoCodeCollapsed: true,\r\n excludeTrial: false,\r\n proSubscriptionSelectionExpanded: true,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Create Account\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected\r\n // and aren't signed in, so redirect back to /subscribe\r\n if (!redirectState || this.props.user) {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n } else {\r\n const email = (redirectState as any).email || \"\";\r\n const firstName = (redirectState as any).firstName || \"\";\r\n const lastName = (redirectState as any).lastName || \"\";\r\n const phoneNumber = (redirectState as any).phoneNumber || \"\";\r\n const enteredPromoCode = (redirectState as any).utm_promo || \"\";\r\n\r\n let selectedProPlanId = \"\";\r\n\r\n if ((redirectState as any).pre_selected_plan) {\r\n selectedProPlanId = ProPlanIdDetermination.getProPlanNameById(\r\n (redirectState as any).pre_selected_plan\r\n );\r\n }\r\n\r\n let excludeTrial = false;\r\n if (\r\n (redirectState as any).excludeTrial &&\r\n (redirectState as any).excludeTrial === \"1\"\r\n ) {\r\n excludeTrial = true;\r\n }\r\n\r\n delete (redirectState as any).email;\r\n delete (redirectState as any).firstName;\r\n delete (redirectState as any).lastName;\r\n delete (redirectState as any).phoneNumber;\r\n delete (redirectState as any).pre_selected_plan;\r\n delete (redirectState as any).utm_promo;\r\n delete (redirectState as any).excludeTrial;\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n email: email,\r\n firstName: firstName,\r\n lastName: lastName,\r\n phoneNumber: phoneNumber,\r\n selectedProPlanId: selectedProPlanId,\r\n proSubscriptionSelectionExpanded: selectedProPlanId.length === 0,\r\n enteredPromoCode: enteredPromoCode,\r\n excludeTrial,\r\n });\r\n\r\n var proPlans = await ProSubscriptionService.getProPlans();\r\n this.setState({ proPlans: proPlans });\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n EventTracking.CreateAccount.onPageLoad();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ event: \"optimize.activate\" });\r\n }\r\n\r\n handlePasswordChange = (e: React.ChangeEvent) => {\r\n let passwordStrengthWidth = \"0%\";\r\n let passwordStrengthClass = \"\";\r\n let passwordStrengthLabel = \"6-25 characters\";\r\n\r\n const passwordLength = e.target.value.length;\r\n if (passwordLength > 0 && passwordLength < 6) {\r\n passwordStrengthWidth = \"33%\";\r\n passwordStrengthClass = \"progress-bar bg-danger\";\r\n passwordStrengthLabel = \"Too Short\";\r\n } else if (passwordLength >= 6 && passwordLength < 8) {\r\n passwordStrengthWidth = \"66%\";\r\n passwordStrengthClass = \"progress-bar bg-warning\";\r\n passwordStrengthLabel = \"Could be Stronger\";\r\n } else if (passwordLength >= 8) {\r\n passwordStrengthWidth = \"100%\";\r\n passwordStrengthClass = \"progress-bar bg-success\";\r\n passwordStrengthLabel = \"Strong Password\";\r\n }\r\n this.setState({\r\n password: e.target.value,\r\n passwordStrengthWidth,\r\n passwordStrengthClass,\r\n passwordStrengthLabel,\r\n });\r\n };\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (\r\n this.state.firstName &&\r\n this.state.lastName &&\r\n this.state.email &&\r\n this.state.password &&\r\n this.state.agreeToTerms\r\n ) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n // 8/29/2019 Caleb Requested: https://trello.com/c/pMkyLi1A/708-m-l-add-custom-events-to-css-selectors-to-payment-pathway-spa\r\n // I'm just commenting this out now, probably we will return it.\r\n // if (this.state.phoneNumber.trim().length === 0) {\r\n // const serverError: FieldValidationError = { field: \"PhoneNumber\", errors: ['Phone number cannot be empty'] };\r\n // this.setState({ errors: [serverError], enableSubmit: true });\r\n // return;\r\n // }\r\n\r\n const response = await AuthenticationService.register(\r\n this.state.firstName,\r\n this.state.lastName,\r\n this.state.email,\r\n this.state.password\r\n );\r\n const excludeTrail = this.state.excludeTrial;\r\n if (ServerResponse.isSuccess(response)) {\r\n EventTracking.CreateAccount.onAccountCreated();\r\n\r\n let redirectState = this.redirectState;\r\n (redirectState as any).phoneNumber = this.state.phoneNumber;\r\n (redirectState as any).hidePhoneNumberCapture = true;\r\n (redirectState as any).selectedProPlanId =\r\n this.state.selectedProPlanId || \"AnnualPlus\";\r\n (redirectState as any).enteredPromoCode = this.state.enteredPromoCode;\r\n (redirectState as any).cameFromCreateAccount = true;\r\n (redirectState as any).excludeTrial = excludeTrail ? \"1\" : \"0\";\r\n this.redirectState = redirectState;\r\n\r\n this.props.handleUpdateUser(response.data);\r\n this.setState({ redirectToSubscribe: true });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n };\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n await this.validatePromoCode();\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n EventTracking.CreateAccount.onPromoCodeSubmitted();\r\n let proPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n if (!proPlan) {\r\n proPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\")!;\r\n }\r\n\r\n const response = await ProSubscriptionService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n proPlan.term,\r\n proPlan.tier\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n onDeselectPlan(e: React.MouseEvent) {\r\n e.preventDefault();\r\n this.setState({ proSubscriptionSelectionExpanded: true });\r\n }\r\n\r\n onPlanChange(plan: ProPlan) {\r\n if (this.state.selectedProPlanId === \"\") {\r\n EventTracking.CreateAccount.onSelectPlan(`${plan.name}-${plan.id}`);\r\n } else {\r\n EventTracking.CreateAccount.onChangePlan(`${plan.name}-${plan.id}`);\r\n }\r\n\r\n this.setState({\r\n selectedProPlanId: plan.id,\r\n proSubscriptionSelectionExpanded: false,\r\n });\r\n }\r\n\r\n renderPlanEntry(plan: ProPlan) {\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n // Override from query string\r\n if (this.state.excludeTrial === true) {\r\n trialAvailable = false;\r\n }\r\n\r\n return (\r\n
\r\n this.onPlanChange(plan)}\r\n onClick={() => this.onPlanChange(plan)}\r\n />\r\n \r\n {trialAvailable ? (\r\n Free Today \r\n ) : (\r\n {plan.name} \r\n )}\r\n \r\n {trialAvailable && {plan.preludeDescription} }$\r\n {monthlyPrice}\r\n {plan.description}\r\n {plan.postDescriptionTrial == null\r\n ? plan.postDescription.length > 0\r\n ? ` $${totalPrice}. ${plan.postDescription}`\r\n : \".\"\r\n : ` $${totalPrice}. ${plan.postDescriptionTrial}`}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToSubscribe) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
1
\r\n Create Account\r\n
2
\r\n Billing Info\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Create Your Account\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n this.setState({ firstName: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n this.setState({ lastName: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ email: e.target.value })}\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ phoneNumber: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n {this.state.passwordStrengthLabel}\r\n

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {this.state.enableSubmit && <>NEXT STEP}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n\r\n

\r\n \r\n Already have an account? Sign in\r\n \r\n

\r\n\r\n

\r\n Sign up for a new account and receive emails and special\r\n offers from SermonCentral and our partners. Your privacy is\r\n always respected. We will never share your email address\r\n with any other organization.\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Your PRO Subscription\r\n \r\n
\r\n
\r\n
\r\n {!this.state.proSubscriptionSelectionExpanded &&\r\n selectedProPlan && (\r\n <>\r\n {this.renderPlanEntry(selectedProPlan)}\r\n  \r\n this.onDeselectPlan(e)}\r\n >\r\n (change)\r\n \r\n \r\n )}\r\n\r\n {this.state.proSubscriptionSelectionExpanded &&\r\n this.state.proPlans.map((plan) => this.renderPlanEntry(plan))}\r\n\r\n {this.state.proSubscriptionSelectionExpanded && (\r\n <>\r\n {!this.state.appliedPromoCode &&\r\n this.state.promoCodeCollapsed && (\r\n {\r\n this.setState({ promoCodeCollapsed: false });\r\n EventTracking.CreateAccount.onPromoCodeLinkClick();\r\n }}\r\n >\r\n Apply promo code{\" \"}\r\n \r\n
\r\n )}\r\n\r\n {!this.state.appliedPromoCode &&\r\n !this.state.promoCodeCollapsed && (\r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n )}\r\n \r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from our\r\n registration page to our secure servers encrypted for your\r\n protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { FieldValidationError } from \"../../services/ServiceHelper\";\r\n\r\nexport const ValidateInput = {\r\n // Validates the expiration month of credit card, returning null means valid.\r\n CreditCardExpiryMonth: (expirationMonth: string) => {\r\n if (\r\n isNaN(+expirationMonth) ||\r\n +expirationMonth < 1 ||\r\n +expirationMonth > 12\r\n ) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardExpirationMonth\",\r\n errors: [\"Expiration Month needs to be between 01-12\"],\r\n };\r\n return serverError;\r\n }\r\n\r\n if (expirationMonth.length < 2) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardExpirationMonth\",\r\n errors: [\"Expiration Month needs to be two digits (MM)\"],\r\n };\r\n\r\n return serverError;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n CreditCardExpiryYear: (expirationYear: string) => {\r\n if (isNaN(+expirationYear)) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardExpirationYear\",\r\n errors: [\"Expiration Year needs to be a valid year\"],\r\n };\r\n return serverError;\r\n }\r\n\r\n if (expirationYear.length < 2) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardExpirationYear\",\r\n errors: [\"Expiration Year needs to be two digits (YY)\"],\r\n };\r\n return serverError;\r\n }\r\n\r\n return null;\r\n },\r\n};\r\n","import * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport ProSubscriptionPromoCode from \"../../entities/ProSubscriptionPromoCode\";\r\nimport { AuthenticationService } from \"../../services/AuthenticationService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport { EventTracking } from \"../../utilities/EventTracking\";\r\nimport { ProPlanIdDetermination } from \"../../utilities/ProPlanIdDetermination\";\r\nimport { ValidateInput } from \"../../utilities/subscribe/validateInput\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n proPlans: ProPlan[];\r\n fullName: string;\r\n email: string;\r\n password: string;\r\n selectedProPlanId: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: ProSubscriptionPromoCode;\r\n enableSubmit: boolean;\r\n errors: FieldValidationError[];\r\n promoCodeCollapsed: boolean;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: string;\r\n expirationYear: string;\r\n postalCode: string;\r\n changePlanActive: boolean;\r\n excludeTrial: boolean;\r\n redirectToConfirmation: boolean;\r\n accountAlreadyCreated: boolean;\r\n initialLoadingError: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n};\r\n\r\nexport default class SubscribeCreateFullAccountEmbed extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n dataLayer = ((window as any).dataLayer = (window as any).dataLayer || []);\r\n numbersOnlyRegex = new RegExp(\"/^d+$/\");\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n proPlans: [],\r\n fullName: \"\",\r\n email: \"\",\r\n password: \"\",\r\n selectedProPlanId: \"AnnualPlus\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n enableSubmit: true,\r\n errors: [],\r\n promoCodeCollapsed: true,\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: \"\",\r\n expirationYear: \"\",\r\n postalCode: \"\",\r\n changePlanActive: false,\r\n excludeTrial: false,\r\n redirectToConfirmation: false,\r\n accountAlreadyCreated: false,\r\n initialLoadingError: false,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Embed Setup\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Embed is weird, if the email submitted from www exists, then auth challenge is issued.\r\n // So you can get here by either being already known user, but if you aren't then we will do more validation.\r\n if (!this.props.user) {\r\n // We need email and full name for this form, otherwise kick them to /subscribe\r\n let invalidRequiredFields =\r\n !(redirectState as any).fullName || !(redirectState as any).email;\r\n\r\n // make sure full name actually has two fields\r\n if (!invalidRequiredFields) {\r\n invalidRequiredFields =\r\n (redirectState as any).fullName.trim().split(\" \").length < 2;\r\n }\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected\r\n // and aren't signed in, or if so redirect back to /subscribe\r\n if (!redirectState || invalidRequiredFields) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We are having issues with submitting your info, redirecting you to our payment page.\",\r\n ],\r\n };\r\n this.setState(\r\n {\r\n errors: [serverError],\r\n enableSubmit: true,\r\n initialLoadingError: true,\r\n },\r\n () => this.postMessageWithDelay()\r\n );\r\n return;\r\n }\r\n }\r\n\r\n const email = (redirectState as any).email || \"\";\r\n const enteredPromoCode = (redirectState as any).utm_promo || \"\";\r\n const fullName = (redirectState as any).fullName || \"\";\r\n\r\n let selectedProPlanId = \"\";\r\n if ((redirectState as any).pre_selected_plan) {\r\n selectedProPlanId = ProPlanIdDetermination.getProPlanNameById(\r\n (redirectState as any).pre_selected_plan\r\n );\r\n }\r\n\r\n let excludeTrial = false;\r\n if (\r\n (redirectState as any).excludeTrial &&\r\n (redirectState as any).excludeTrial === \"1\"\r\n ) {\r\n excludeTrial = true;\r\n }\r\n\r\n delete (redirectState as any).email;\r\n delete (redirectState as any).phoneNumber;\r\n delete (redirectState as any).pre_selected_plan;\r\n delete (redirectState as any).utm_promo;\r\n delete (redirectState as any).excludeTrial;\r\n delete (redirectState as any).fullName;\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n email: email,\r\n selectedProPlanId: selectedProPlanId,\r\n enteredPromoCode: enteredPromoCode,\r\n fullName,\r\n excludeTrial,\r\n });\r\n\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n ProSubscriptionService.getCountries(),\r\n ]);\r\n\r\n const [proPlansResult, locationResult] = responses;\r\n\r\n if (ServerResponse.isError(proPlansResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve plans. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ proPlans: proPlansResult });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n EventTracking.CreateEmbedAccountQuickSetup.onPageLoad();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ event: \"optimize.activate\" });\r\n }\r\n\r\n checkTax = async (postalCode: string) => {\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (!selectedProPlan) {\r\n selectedProPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n EventTracking.CreateAccount.onPromoCodeSubmitted();\r\n let proPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n if (!proPlan) {\r\n proPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\")!;\r\n }\r\n\r\n const response = await ProSubscriptionService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n proPlan.term,\r\n proPlan.tier\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () => this.checkTax(this.state.postalCode)\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n validateExpiryMonth() {\r\n var validationError = ValidateInput.CreditCardExpiryMonth(\r\n this.state.expirationMonth\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n validateExpiryYear() {\r\n var validationError = ValidateInput.CreditCardExpiryYear(\r\n this.state.expirationYear\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n validateFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryMonth()) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryYear()) {\r\n return;\r\n }\r\n\r\n if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n if (this.props.user) {\r\n // If user already exists, then don't need to recreate (this would happen if we got here after auth challenge);\r\n await this.SetUpBilling();\r\n } else if (this.state.fullName && this.state.email && this.state.password) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n let splitName = this.state.fullName.trim().split(\" \");\r\n\r\n lastName = splitName[splitName.length - 1];\r\n firstName = splitName.slice(0, splitName.length - 1).join(\" \");\r\n\r\n const response = await AuthenticationService.register(\r\n firstName.trim(),\r\n lastName.trim(),\r\n this.state.email,\r\n this.state.password\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({ accountAlreadyCreated: true });\r\n EventTracking.CreateEmbedAccountQuickSetup.onAccountCreated();\r\n this.props.handleUpdateUser(response.data);\r\n await this.SetUpBilling();\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We are having issues with submitting your info, redirecting you to our payment page.\",\r\n ],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true }, () =>\r\n this.postMessageWithDelay()\r\n );\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We are having issues with submitting your info, redirecting you to our payment page.\",\r\n ],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true }, () =>\r\n this.postMessageWithDelay()\r\n );\r\n }\r\n }\r\n };\r\n\r\n async SetUpBilling() {\r\n // Double check that this isn't happening\r\n if (!this.state.validatedPostalCodeLocation) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n }\r\n\r\n // We need a 4 digit year, but this form allows for only two digits, but if a saved payment method is used from the\r\n // browser, the year will be 4 digits. So adjust the value if it's only 2.\r\n\r\n let expirationYear: number =\r\n this.state.expirationYear.length === 4\r\n ? +this.state.expirationYear\r\n : +(20 + this.state.expirationYear);\r\n\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response;\r\n if (this.state.selectedProPlanId === \"AnnualBasic\") {\r\n response = await ProSubscriptionService.subscribeToAnnualBasic(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (\r\n this.state.selectedProPlanId === \"AnnualPlus\" ||\r\n !this.state.selectedProPlanId\r\n ) {\r\n response = await ProSubscriptionService.subscribeToAnnualPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.excludeTrial,\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"AnnualPremium\") {\r\n response = await ProSubscriptionService.subscribeToAnnualPremium(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"MonthlyPlus\") {\r\n response = await ProSubscriptionService.subscribeToMonthlyPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n }\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n EventTracking.CreateEmbedAccountQuickSetup.onBillingInfoSubmitted();\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n redirectedFromEmbed: true,\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We are having issues with submitting your info, redirecting you to our payment page.\",\r\n ],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true }, () =>\r\n this.postMessageWithDelay()\r\n );\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We are having issues with submitting your info, redirecting you to our payment page.\",\r\n ],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true }, () =>\r\n this.postMessageWithDelay()\r\n );\r\n }\r\n }\r\n\r\n postMessageWithDelay() {\r\n setTimeout(function () {\r\n window.parent.postMessage(\"errorsInForm\", \"*\");\r\n }, 3000);\r\n }\r\n\r\n onkeyDownNumbersOnly(\r\n e: React.KeyboardEvent,\r\n currentValue: string\r\n ) {\r\n // If Backspace (8), Delete (46), Arrows (37, 38, 39, 40), or Tab (9), let thru too\r\n if (\r\n e.keyCode !== 8 &&\r\n e.keyCode !== 46 &&\r\n e.keyCode !== 37 &&\r\n e.keyCode !== 38 &&\r\n e.keyCode !== 39 &&\r\n e.keyCode !== 40 &&\r\n e.keyCode !== 9\r\n ) {\r\n let key = Number(e.key);\r\n if (isNaN(key) || e.key === null || currentValue.length === 2) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onBlurExpiryYear(e: React.FocusEvent) {\r\n if (this.state.expirationYear.length === 1) {\r\n this.setState({ expirationYear: 0 + this.state.expirationYear });\r\n }\r\n }\r\n\r\n onBlurExpiryMonth(e: React.FocusEvent) {\r\n if (this.state.expirationMonth.length === 1) {\r\n this.setState({ expirationMonth: 0 + this.state.expirationMonth });\r\n }\r\n }\r\n\r\n determineSelectedInfo(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n if (plan.term === 12) {\r\n return (\r\n
\r\n
Billed Annually
\r\n
\r\n
\r\n ${totalPrice} {trialAvailable ? \"($0 Today)\" : \"\"}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n
Billed Monthly
\r\n
\r\n
\r\n ${totalPrice}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n onPlanChange(plan: ProPlan) {\r\n if (this.state.selectedProPlanId === \"\") {\r\n EventTracking.CreateEmbedAccountQuickSetup.onSelectPlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n } else {\r\n EventTracking.CreateEmbedAccountQuickSetup.onChangePlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n }\r\n\r\n this.setState({ selectedProPlanId: plan.id, changePlanActive: false }, () =>\r\n this.checkTax(this.state.postalCode)\r\n );\r\n }\r\n\r\n determineButtonText(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n if (this.state.appliedPromoCode || this.state.excludeTrial) {\r\n return \"Activate My Account\";\r\n } else if (plan.allowTrial) {\r\n return \"Start Your Free Trial!\";\r\n } else {\r\n return \"Activate My Account\";\r\n }\r\n }\r\n\r\n dueToday(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n return trialAvailable ? 0 : totalPrice;\r\n }\r\n\r\n renderTOS(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (trialAvailable) {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  After 14 days, your account will bill and activate with full\r\n benefits.\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  Your account will activate immediately with full PRO benefits.\r\n It will bill at ${totalPrice}/{plan.term === 1 ? \"mo\" : \"yr\"}. Cancel\r\n any time.\r\n \r\n );\r\n }\r\n }\r\n\r\n renderPlanEntry(plan: ProPlan) {\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n // Override from query string\r\n if (this.state.excludeTrial === true) {\r\n trialAvailable = false;\r\n }\r\n\r\n let abbrevPlanName = \"\";\r\n let abbrevDescription = \"\";\r\n\r\n switch (plan.id) {\r\n case \"AnnualPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = trialAvailable\r\n ? \"14 day trial for $0 today\"\r\n : `Get full access + unlimited media for ${totalPrice}/yr`;\r\n break;\r\n case \"AnnualBasic\":\r\n abbrevPlanName = \"Basic\";\r\n abbrevDescription = `Get basic access for ${totalPrice}/yr`;\r\n break;\r\n case \"MonthlyPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = `Get full access for ${totalPrice}/mo`;\r\n break;\r\n case \"AnnualPremium\":\r\n abbrevPlanName = \"Premium\";\r\n abbrevDescription = `Full access + sermon kits for ${totalPrice}/yr`;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {trialAvailable ? (\r\n Free \r\n ) : (\r\n {abbrevPlanName} \r\n )}\r\n \r\n {abbrevDescription}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (this.state.initialLoadingError) {\r\n return (\r\n \r\n
\r\n \r\n Loading ...{\" \"}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n {this.determineSelectedInfo(selectedProPlan)}\r\n
\r\n \r\n {!this.props.user && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({ password: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ creditCardNumber: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ expirationMonth: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationMonth\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryMonth(e)}\r\n />\r\n \r\n /\r\n \r\n \r\n this.setState({ expirationYear: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationYear\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryYear(e)}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardNumber\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationMonth\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationYear\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n
\r\n
\r\n \r\n this.setState({ cv2: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardPostalCode\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardSecurityCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n )}\r\n \r\n \r\n Due Today:{\" \"}\r\n \r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {this.state.enableSubmit && (\r\n <>{this.determineButtonText(selectedProPlan)}\r\n )}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n Due Today:{\" \"}\r\n \r\n
\r\n
\r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderTOS(selectedProPlan)}\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport ProSubscriptionPromoCode from \"../../entities/ProSubscriptionPromoCode\";\r\nimport CreditCards from \"../../resources/credit-cards.png\";\r\nimport { AuthenticationService } from \"../../services/AuthenticationService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport { EventTracking } from \"../../utilities/EventTracking\";\r\nimport { ProPlanIdDetermination } from \"../../utilities/ProPlanIdDetermination\";\r\nimport { ValidateInput } from \"../../utilities/subscribe/validateInput\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n proPlans: ProPlan[];\r\n fullName: string;\r\n email: string;\r\n password: string;\r\n selectedProPlanId: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: ProSubscriptionPromoCode;\r\n redirectToSubscribe: boolean;\r\n enableSubmit: boolean;\r\n errors: FieldValidationError[];\r\n promoCodeCollapsed: boolean;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: string;\r\n expirationYear: string;\r\n postalCode: string;\r\n changePlanActive: boolean;\r\n excludeTrial: boolean;\r\n redirectToConfirmation: boolean;\r\n accountAlreadyCreated: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n};\r\n\r\nexport default class SubscribeCreateFullAccountQuickSetup extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n dataLayer = ((window as any).dataLayer = (window as any).dataLayer || []);\r\n numbersOnlyRegex = new RegExp(\"/^d+$/\");\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n proPlans: [],\r\n fullName: \"\",\r\n email: \"\",\r\n password: \"\",\r\n selectedProPlanId: \"AnnualPlus\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n redirectToSubscribe: false,\r\n enableSubmit: true,\r\n errors: [],\r\n promoCodeCollapsed: true,\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: \"\",\r\n expirationYear: \"\",\r\n postalCode: \"\",\r\n changePlanActive: false,\r\n excludeTrial: false,\r\n redirectToConfirmation: false,\r\n accountAlreadyCreated: false,\r\n countries: [],\r\n showCountries: false,\r\n taxAmount: 0,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Quick Setup\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected\r\n // and aren't signed in, or if so redirect back to /subscribe\r\n if (!redirectState || this.props.user) {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n } else {\r\n // We need email and full name for this form, otherwise kick them to /subscribe\r\n let invalidRequiredFields =\r\n !(redirectState as any).fullName || !(redirectState as any).email;\r\n\r\n // make sure full name actually has two fields\r\n if (!invalidRequiredFields) {\r\n invalidRequiredFields =\r\n (redirectState as any).fullName.trim().split(\" \").length < 2;\r\n } else {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n }\r\n\r\n const email = (redirectState as any).email || \"\";\r\n const enteredPromoCode = (redirectState as any).utm_promo || \"\";\r\n const fullName = (redirectState as any).fullName || \"\";\r\n\r\n let selectedProPlanId = \"AnnualPlus\";\r\n\r\n if ((redirectState as any).pre_selected_plan) {\r\n selectedProPlanId = ProPlanIdDetermination.getProPlanNameById(\r\n (redirectState as any).pre_selected_plan\r\n );\r\n }\r\n\r\n let excludeTrial = false;\r\n if (\r\n (redirectState as any).excludeTrial &&\r\n (redirectState as any).excludeTrial === \"1\"\r\n ) {\r\n excludeTrial = true;\r\n }\r\n\r\n delete (redirectState as any).email;\r\n delete (redirectState as any).phoneNumber;\r\n delete (redirectState as any).pre_selected_plan;\r\n delete (redirectState as any).utm_promo;\r\n delete (redirectState as any).excludeTrial;\r\n delete (redirectState as any).fullName;\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n email: email,\r\n selectedProPlanId: selectedProPlanId,\r\n enteredPromoCode: enteredPromoCode,\r\n fullName,\r\n excludeTrial,\r\n });\r\n\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n ProSubscriptionService.getCountries(),\r\n ]);\r\n\r\n const [proPlansResult, locationResult] = responses;\r\n\r\n if (ServerResponse.isError(proPlansResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve plans. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ proPlans: proPlansResult });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n EventTracking.CreateFullAccountQuickSetup.onPageLoad();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ event: \"optimize.activate\" });\r\n }\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n EventTracking.CreateAccount.onPromoCodeSubmitted();\r\n let proPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n if (!proPlan) {\r\n proPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\")!;\r\n }\r\n\r\n const response = await ProSubscriptionService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n proPlan.term,\r\n proPlan.tier\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () => this.checkTax(this.state.postalCode)\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n validateExpiryMonth() {\r\n var validationError = ValidateInput.CreditCardExpiryMonth(\r\n this.state.expirationMonth\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n validateExpiryYear() {\r\n var validationError = ValidateInput.CreditCardExpiryYear(\r\n this.state.expirationYear\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n validateFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryMonth()) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryYear()) {\r\n return;\r\n }\r\n\r\n if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n if (this.state.accountAlreadyCreated) {\r\n // If the account created has already happened but billing did not, don't create another account, attempt payment.\r\n await this.SetUpBilling();\r\n return;\r\n }\r\n\r\n if (this.state.fullName && this.state.email && this.state.password) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n let splitName = this.state.fullName.trim().split(\" \");\r\n\r\n if (splitName.length < 2) {\r\n const serverError: FieldValidationError = {\r\n field: \"FirstName\",\r\n errors: [\"First and Last name are required\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n lastName = splitName[splitName.length - 1];\r\n firstName = splitName.slice(0, splitName.length - 1).join(\" \");\r\n\r\n const response = await AuthenticationService.register(\r\n firstName.trim(),\r\n lastName.trim(),\r\n this.state.email,\r\n this.state.password\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({ accountAlreadyCreated: true });\r\n EventTracking.CreateFullAccountQuickSetup.onAccountCreated();\r\n this.props.handleUpdateUser(response.data);\r\n await this.SetUpBilling();\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n };\r\n\r\n async SetUpBilling() {\r\n // Double check that this isn't happening\r\n if (!this.state.validatedPostalCodeLocation) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n }\r\n\r\n // We need a 4 digit year, but this form allows for only two digits, but if a saved payment method is used from the\r\n // browser, the year will be 4 digits. So adjust the value if it's only 2.\r\n\r\n let expirationYear: number =\r\n this.state.expirationYear.length === 4\r\n ? +this.state.expirationYear\r\n : +(20 + this.state.expirationYear);\r\n\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response;\r\n if (this.state.selectedProPlanId === \"AnnualBasic\") {\r\n response = await ProSubscriptionService.subscribeToAnnualBasic(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (\r\n this.state.selectedProPlanId === \"AnnualPlus\" ||\r\n !this.state.selectedProPlanId\r\n ) {\r\n response = await ProSubscriptionService.subscribeToAnnualPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.excludeTrial,\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"AnnualPremium\") {\r\n response = await ProSubscriptionService.subscribeToAnnualPremium(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"MonthlyPlus\") {\r\n response = await ProSubscriptionService.subscribeToMonthlyPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n }\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n EventTracking.CreateFullAccountQuickSetup.onBillingInfoSubmitted();\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n redirectedFromBillingInfo: true,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n\r\n checkTax = async (postalCode: string) => {\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n onkeyDownNumbersOnly(\r\n e: React.KeyboardEvent,\r\n currentValue: string\r\n ) {\r\n // If Backspace (8), Delete (46), Arrows (37, 38, 39, 40), or Tab (9), let thru too\r\n if (\r\n e.keyCode !== 8 &&\r\n e.keyCode !== 46 &&\r\n e.keyCode !== 37 &&\r\n e.keyCode !== 38 &&\r\n e.keyCode !== 39 &&\r\n e.keyCode !== 40 &&\r\n e.keyCode !== 9\r\n ) {\r\n let key = Number(e.key);\r\n if (isNaN(key) || e.key === null || currentValue.length === 2) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onBlurExpiryYear(e: React.FocusEvent) {\r\n if (this.state.expirationYear.length === 1) {\r\n this.setState({ expirationYear: 0 + this.state.expirationYear });\r\n }\r\n }\r\n\r\n onBlurExpiryMonth(e: React.FocusEvent) {\r\n if (this.state.expirationMonth.length === 1) {\r\n this.setState({ expirationMonth: 0 + this.state.expirationMonth });\r\n }\r\n }\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n await this.validatePromoCode();\r\n };\r\n\r\n determineSelectedInfo(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n if (plan.term === 12) {\r\n return (\r\n
\r\n
Billed Annually
\r\n
\r\n
\r\n ${totalPrice} {trialAvailable ? \"($0 Today)\" : \"\"}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n
Billed Monthly
\r\n
\r\n
\r\n ${totalPrice}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n onPlanChange(plan: ProPlan) {\r\n if (this.state.selectedProPlanId === \"\") {\r\n EventTracking.CreateFullAccountQuickSetup.onSelectPlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n } else {\r\n EventTracking.CreateFullAccountQuickSetup.onChangePlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n }\r\n\r\n this.setState({ selectedProPlanId: plan.id, changePlanActive: false }, () =>\r\n this.checkTax(this.state.postalCode)\r\n );\r\n }\r\n\r\n determineButtonText(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n if (this.state.appliedPromoCode || this.state.excludeTrial) {\r\n return \"Activate My Account\";\r\n } else if (plan.allowTrial) {\r\n return \"Start Your Free Trial!\";\r\n } else {\r\n return \"Activate My Account\";\r\n }\r\n }\r\n\r\n dueToday(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n return trialAvailable ? 0 : totalPrice;\r\n }\r\n\r\n renderTOS(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (trialAvailable) {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  After 14 days, your account will bill and activate with full\r\n benefits.\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  Your account will activate immediately with full PRO benefits.\r\n It will bill at ${totalPrice}/{plan.term === 1 ? \"mo\" : \"yr\"}. Cancel\r\n any time.\r\n \r\n );\r\n }\r\n }\r\n\r\n renderPlanEntry(plan: ProPlan) {\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n // Override from query string\r\n if (this.state.excludeTrial === true) {\r\n trialAvailable = false;\r\n }\r\n\r\n let abbrevPlanName = \"\";\r\n let abbrevDescription = \"\";\r\n\r\n switch (plan.id) {\r\n case \"AnnualPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = trialAvailable\r\n ? \"14 day trial for $0 today\"\r\n : `Get full access + unlimited media for ${totalPrice}/yr`;\r\n break;\r\n case \"AnnualBasic\":\r\n abbrevPlanName = \"Basic\";\r\n abbrevDescription = `Get basic access for ${totalPrice}/yr`;\r\n break;\r\n case \"MonthlyPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = `Get full access for ${totalPrice}/mo`;\r\n break;\r\n case \"AnnualPremium\":\r\n abbrevPlanName = \"Premium\";\r\n abbrevDescription = `Full access + sermon kits for ${totalPrice}/yr`;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {trialAvailable ? (\r\n Free \r\n ) : (\r\n {abbrevPlanName} \r\n )}\r\n \r\n {abbrevDescription}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToSubscribe) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Finish Your Account\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"Email\"\r\n ) && (\r\n
\r\n
\r\n \r\n Email Address\r\n \r\n \r\n this.setState({ email: e.target.value })\r\n }\r\n />\r\n
\r\n We had an issue submitting your email\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n \r\n Create your Password (6-12 characters)\r\n \r\n \r\n this.setState({ password: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ creditCardNumber: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ expirationMonth: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationMonth\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryMonth(e)}\r\n />\r\n \r\n /\r\n \r\n \r\n this.setState({ expirationYear: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationYear\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryYear(e)}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardNumber\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationMonth\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationYear\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) =>\r\n this.checkTax(e.target.value as string)\r\n }\r\n />\r\n
\r\n
\r\n \r\n this.setState({ cv2: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardPostalCode\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardSecurityCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n )}\r\n {!this.state.appliedPromoCode && (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n I have a promo code I want to use\r\n \r\n
\r\n\r\n {!this.state.promoCodeCollapsed && (\r\n
\r\n \r\n Promo code\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n \r\n \r\n Due Today:{\" \"}\r\n \r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {this.state.enableSubmit && (\r\n <>{this.determineButtonText(selectedProPlan)}\r\n )}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n Due Today:{\" \"}\r\n \r\n
\r\n
\r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderTOS(selectedProPlan)}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {this.determineSelectedInfo(selectedProPlan)}\r\n
\r\n
\r\n
\r\n {!this.state.changePlanActive && (\r\n this.setState({ changePlanActive: true })}\r\n className=\"change-plan-label\"\r\n >\r\n Change Your Plan\r\n

\r\n )}\r\n {this.state.changePlanActive &&\r\n this.state.proPlans.map((plan) =>\r\n this.renderPlanEntry(plan)\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \"Appreciate you guys so much. I’ve used hundreds of your\r\n video resources in weekly messages to youth, kids and\r\n adults. Best resources out there\"\r\n \r\n
\r\n Phil Kleins\r\n
\r\n
\r\n \r\n \"SermonCentral has DRASTICALLY sped up my sermons from\r\n idea-gathering to outlining to presentation. I am SO\r\n thankful for your help.\"\r\n \r\n
\r\n Michael Dean\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport ProSubscriptionPromoCode from \"../../entities/ProSubscriptionPromoCode\";\r\nimport CreditCards from \"../../resources/credit-cards.png\";\r\nimport { AuthenticationService } from \"../../services/AuthenticationService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport { EventTracking } from \"../../utilities/EventTracking\";\r\nimport { ProPlanIdDetermination } from \"../../utilities/ProPlanIdDetermination\";\r\nimport { ValidateInput } from \"../../utilities/subscribe/validateInput\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n proPlans: ProPlan[];\r\n fullName: string;\r\n email: string;\r\n password: string;\r\n selectedProPlanId: string;\r\n enteredPromoCode: string;\r\n appliedPromoCode?: ProSubscriptionPromoCode;\r\n redirectToSubscribe: boolean;\r\n enableSubmit: boolean;\r\n errors: FieldValidationError[];\r\n promoCodeCollapsed: boolean;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: string;\r\n expirationYear: string;\r\n postalCode: string;\r\n changePlanActive: boolean;\r\n excludeTrial: boolean;\r\n redirectToConfirmation: boolean;\r\n accountAlreadyCreated: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n taxAmount: number;\r\n};\r\n\r\nexport default class SubscribeCreateFullAccountSinglePage extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n dataLayer = ((window as any).dataLayer = (window as any).dataLayer || []);\r\n numbersOnlyRegex = new RegExp(\"/^d+$/\");\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n proPlans: [],\r\n fullName: \"\",\r\n email: \"\",\r\n password: \"\",\r\n selectedProPlanId: \"AnnualPlus\",\r\n enteredPromoCode: \"\",\r\n appliedPromoCode: undefined,\r\n redirectToSubscribe: false,\r\n enableSubmit: true,\r\n errors: [],\r\n promoCodeCollapsed: true,\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: \"\",\r\n expirationYear: \"\",\r\n postalCode: \"\",\r\n changePlanActive: false,\r\n excludeTrial: false,\r\n redirectToConfirmation: false,\r\n accountAlreadyCreated: false,\r\n countries: [],\r\n taxAmount: 0,\r\n showCountries: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Create Full Account Page\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected\r\n // and aren't signed in, so redirect back to /subscribe\r\n if (!redirectState || this.props.user) {\r\n this.setState({\r\n redirectToSubscribe: true,\r\n });\r\n } else {\r\n const email = (redirectState as any).email || \"\";\r\n const firstName = (redirectState as any).firstName || \"\";\r\n const lastName = (redirectState as any).lastName || \"\";\r\n const enteredPromoCode = (redirectState as any).utm_promo || \"\";\r\n const fullName = (redirectState as any).fullName || \"\";\r\n\r\n let selectedProPlanId = \"\";\r\n\r\n if ((redirectState as any).pre_selected_plan) {\r\n selectedProPlanId = ProPlanIdDetermination.getProPlanNameById(\r\n (redirectState as any).pre_selected_plan\r\n );\r\n }\r\n\r\n let excludeTrial = false;\r\n if (\r\n (redirectState as any).excludeTrial &&\r\n (redirectState as any).excludeTrial === \"1\"\r\n ) {\r\n excludeTrial = true;\r\n }\r\n\r\n delete (redirectState as any).email;\r\n delete (redirectState as any).firstName;\r\n delete (redirectState as any).lastName;\r\n delete (redirectState as any).phoneNumber;\r\n delete (redirectState as any).pre_selected_plan;\r\n delete (redirectState as any).utm_promo;\r\n delete (redirectState as any).excludeTrial;\r\n delete (redirectState as any).fullName;\r\n\r\n let sentFullName = fullName\r\n ? fullName\r\n : firstName && lastName\r\n ? `${firstName} ${lastName}`.trim()\r\n : \"\";\r\n\r\n this.redirectState = redirectState;\r\n this.setState({\r\n email: email,\r\n selectedProPlanId: selectedProPlanId,\r\n enteredPromoCode: enteredPromoCode,\r\n fullName: sentFullName,\r\n excludeTrial,\r\n });\r\n\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n ProSubscriptionService.getCountries(),\r\n ]);\r\n\r\n const [proPlansResult, locationResult] = responses;\r\n\r\n if (ServerResponse.isError(proPlansResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve plans. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ proPlans: proPlansResult });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (enteredPromoCode) {\r\n await this.validatePromoCode();\r\n }\r\n\r\n EventTracking.CreateFullAccountSinglePage.onPageLoad();\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.dataLayer.push({ event: \"optimize.activate\" });\r\n }\r\n\r\n async validatePromoCode() {\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (this.state.enteredPromoCode) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n EventTracking.CreateAccount.onPromoCodeSubmitted();\r\n let proPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n if (!proPlan) {\r\n proPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\")!;\r\n }\r\n\r\n const response = await ProSubscriptionService.validatePromoCode(\r\n this.state.enteredPromoCode,\r\n proPlan.term,\r\n proPlan.tier\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState(\r\n {\r\n appliedPromoCode: response.data,\r\n enableSubmit: true,\r\n errors: [],\r\n },\r\n () => this.checkTax(this.state.postalCode)\r\n );\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n }\r\n\r\n validateExpiryMonth() {\r\n var validationError = ValidateInput.CreditCardExpiryMonth(\r\n this.state.expirationMonth\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n validateExpiryYear() {\r\n var validationError = ValidateInput.CreditCardExpiryYear(\r\n this.state.expirationYear\r\n );\r\n\r\n if (validationError != null) {\r\n this.setState({ errors: [validationError], enableSubmit: true });\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryMonth()) {\r\n return;\r\n }\r\n\r\n if (!this.validateExpiryYear()) {\r\n return;\r\n }\r\n\r\n if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n checkTax = async (postalCode: string) => {\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n if (!selectedProPlan) {\r\n selectedProPlan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n this.state.appliedPromoCode\r\n );\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n this.setState({ taxAmount: taxRequest == null ? 0 : taxRequest });\r\n };\r\n\r\n submitData = async () => {\r\n if (this.state.accountAlreadyCreated) {\r\n // If the account created has already happened but billing did not, don't create another account, attempt payment.\r\n await this.SetUpBilling();\r\n return;\r\n }\r\n\r\n if (this.state.fullName && this.state.email && this.state.password) {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let firstName = \"\";\r\n let lastName = \"\";\r\n\r\n let splitName = this.state.fullName.trim().split(\" \");\r\n\r\n if (splitName.length < 2) {\r\n const serverError: FieldValidationError = {\r\n field: \"FirstName\",\r\n errors: [\"First and Last name are required\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n return;\r\n }\r\n\r\n lastName = splitName[splitName.length - 1];\r\n firstName = splitName.slice(0, splitName.length - 1).join(\" \");\r\n\r\n const response = await AuthenticationService.register(\r\n firstName.trim(),\r\n lastName.trim(),\r\n this.state.email,\r\n this.state.password\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({ accountAlreadyCreated: true });\r\n EventTracking.CreateFullAccountSinglePage.onAccountCreated();\r\n this.props.handleUpdateUser(response.data);\r\n await this.SetUpBilling();\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(\r\n response\r\n )\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n };\r\n\r\n async SetUpBilling() {\r\n // Double check that this isn't happening\r\n if (!this.state.validatedPostalCodeLocation) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n }\r\n\r\n // We need a 4 digit year, but this form allows for only two digits, but if a saved payment method is used from the\r\n // browser, the year will be 4 digits. So adjust the value if it's only 2.\r\n\r\n let expirationYear: number =\r\n this.state.expirationYear.length === 4\r\n ? +this.state.expirationYear\r\n : +(20 + this.state.expirationYear);\r\n\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response;\r\n if (this.state.selectedProPlanId === \"AnnualBasic\") {\r\n response = await ProSubscriptionService.subscribeToAnnualBasic(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (\r\n this.state.selectedProPlanId === \"AnnualPlus\" ||\r\n !this.state.selectedProPlanId\r\n ) {\r\n response = await ProSubscriptionService.subscribeToAnnualPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.excludeTrial,\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"AnnualPremium\") {\r\n response = await ProSubscriptionService.subscribeToAnnualPremium(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n } else if (this.state.selectedProPlanId === \"MonthlyPlus\") {\r\n response = await ProSubscriptionService.subscribeToMonthlyPlus(\r\n \"\",\r\n this.state.fullName,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n +this.state.expirationMonth,\r\n expirationYear,\r\n this.state.postalCode,\r\n \"\",\r\n this.state.appliedPromoCode ? this.state.appliedPromoCode.code : \"\",\r\n this.redirectState[\"pageTemplate\"] || \"\",\r\n this.redirectState[\"url_ref\"] || \"\",\r\n this.redirectState[\"utm_campaign\"] || \"\",\r\n this.redirectState[\"utm_content\"] || \"\",\r\n this.redirectState[\"utm_medium\"] || \"\",\r\n this.redirectState[\"utm_source\"] || \"\",\r\n this.state.validatedPostalCodeLocation.region,\r\n this.state.validatedPostalCodeLocation.country\r\n );\r\n }\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n EventTracking.CreateFullAccountSinglePage.onBillingInfoSubmitted();\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n redirectedFromBillingInfo: true,\r\n appliedPromoCode: this.state.appliedPromoCode\r\n ? this.state.appliedPromoCode.code\r\n : \"\",\r\n };\r\n this.setState({ errors: [], redirectToConfirmation: true });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n }\r\n\r\n onkeyDownNumbersOnly(\r\n e: React.KeyboardEvent,\r\n currentValue: string\r\n ) {\r\n // If Backspace (8), Delete (46), Arrows (37, 38, 39, 40), or Tab (9), let thru too\r\n if (\r\n e.keyCode !== 8 &&\r\n e.keyCode !== 46 &&\r\n e.keyCode !== 37 &&\r\n e.keyCode !== 38 &&\r\n e.keyCode !== 39 &&\r\n e.keyCode !== 40 &&\r\n e.keyCode !== 9\r\n ) {\r\n let key = Number(e.key);\r\n if (isNaN(key) || e.key === null || currentValue.length === 2) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onBlurExpiryYear(e: React.FocusEvent) {\r\n if (this.state.expirationYear.length === 1) {\r\n this.setState({ expirationYear: 0 + this.state.expirationYear });\r\n }\r\n }\r\n\r\n onBlurExpiryMonth(e: React.FocusEvent) {\r\n if (this.state.expirationMonth.length === 1) {\r\n this.setState({ expirationMonth: 0 + this.state.expirationMonth });\r\n }\r\n }\r\n\r\n handlePromoCodeFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n await this.validatePromoCode();\r\n };\r\n\r\n determineSelectedInfo(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n if (plan.term === 12) {\r\n return (\r\n
\r\n
Billed Annually
\r\n
\r\n
\r\n ${totalPrice} {trialAvailable ? \"($0 Today)\" : \"\"}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n return (\r\n
\r\n
Billed Monthly
\r\n
\r\n
\r\n ${totalPrice}\r\n
\r\n {this.state.taxAmount > 0 && (\r\n \r\n *{totalPrice + this.state.taxAmount} including tax\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n onPlanChange(plan: ProPlan) {\r\n if (this.state.selectedProPlanId === \"\") {\r\n EventTracking.CreateFullAccountSinglePage.onSelectPlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n } else {\r\n EventTracking.CreateFullAccountSinglePage.onChangePlan(\r\n `${plan.name}-${plan.id}`\r\n );\r\n }\r\n\r\n this.setState({ selectedProPlanId: plan.id, changePlanActive: false }, () =>\r\n this.checkTax(this.state.postalCode)\r\n );\r\n }\r\n\r\n determineButtonText(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n if (this.state.appliedPromoCode || this.state.excludeTrial) {\r\n return \"Activate My Account\";\r\n } else if (plan.allowTrial) {\r\n return \"Start Your Free Trial!\";\r\n } else {\r\n return \"Activate My Account\";\r\n }\r\n }\r\n\r\n dueToday(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (this.state.excludeTrial) {\r\n trialAvailable = false;\r\n }\r\n\r\n return trialAvailable ? 0 : totalPrice;\r\n }\r\n\r\n renderTOS(plan: ProPlan | undefined) {\r\n if (!plan) {\r\n plan = this.state.proPlans.find((p) => p.id === \"AnnualPlus\");\r\n }\r\n\r\n if (!plan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n if (trialAvailable) {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  After 14 days, your account will bill and activate with full\r\n benefits.\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n By signing up, you are agreeing to our \r\n \r\n Terms of Service\r\n \r\n .  Your account will activate immediately with full PRO benefits.\r\n It will bill at ${totalPrice}/{plan.term === 1 ? \"mo\" : \"yr\"}. Cancel\r\n any time.\r\n \r\n );\r\n }\r\n }\r\n\r\n renderPlanEntry(plan: ProPlan) {\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n plan,\r\n this.state.appliedPromoCode\r\n );\r\n let monthlyPrice =\r\n plan.billingPeriod === \"yr\"\r\n ? ProSubscriptionService.getMonthlyPrice(totalPrice)\r\n : totalPrice;\r\n let trialAvailable =\r\n plan.allowTrial &&\r\n !this.state.appliedPromoCode &&\r\n !(this.props.user && this.props.user.hasEverHadProSubscription);\r\n\r\n // Override from query string\r\n if (this.state.excludeTrial === true) {\r\n trialAvailable = false;\r\n }\r\n\r\n let abbrevPlanName = \"\";\r\n let abbrevDescription = \"\";\r\n\r\n switch (plan.id) {\r\n case \"AnnualPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = trialAvailable\r\n ? \"14 day trial for $0 today\"\r\n : `Get full access + unlimited media for ${totalPrice}/yr`;\r\n break;\r\n case \"AnnualBasic\":\r\n abbrevPlanName = \"Basic\";\r\n abbrevDescription = `Get basic access for ${totalPrice}/yr`;\r\n break;\r\n case \"MonthlyPlus\":\r\n abbrevPlanName = \"Plus\";\r\n abbrevDescription = `Get full access for ${totalPrice}/mo`;\r\n break;\r\n case \"AnnualPremium\":\r\n abbrevPlanName = \"Premium\";\r\n abbrevDescription = `Full access + sermon kits for ${totalPrice}/yr`;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {trialAvailable ? (\r\n Free \r\n ) : (\r\n {abbrevPlanName} \r\n )}\r\n \r\n {abbrevDescription}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.redirectToSubscribe) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.state.redirectToConfirmation) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Account Info\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Full Name\r\n \r\n \r\n this.setState({ fullName: e.target.value })\r\n }\r\n />\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Email Address\r\n \r\n this.setState({ email: e.target.value })}\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Password (6-12 characters)\r\n \r\n \r\n this.setState({ password: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Payment Info\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.setState({ creditCardNumber: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ expirationMonth: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationMonth\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryMonth(e)}\r\n />\r\n \r\n /\r\n \r\n \r\n this.setState({ expirationYear: e.target.value })\r\n }\r\n onKeyDown={(e) =>\r\n this.onkeyDownNumbersOnly(\r\n e,\r\n this.state.expirationYear\r\n )\r\n }\r\n onBlur={(e) => this.onBlurExpiryYear(e)}\r\n />\r\n
\r\n
\r\n
\r\n \r\n this.setState({ cv2: e.target.value })\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardNumber\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardSecurityCode\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationMonth\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"CreditCardExpirationYear\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n onBlur={(e) => this.checkTax(e.target.value as string)}\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {!this.state.appliedPromoCode && (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n I have a promo code I want to use\r\n \r\n
\r\n\r\n {!this.state.promoCodeCollapsed && (\r\n
\r\n \r\n Promo code\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n enteredPromoCode: e.target.value,\r\n })\r\n }\r\n />\r\n
\r\n \r\n Apply\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n )}\r\n\r\n \r\n \r\n Due Today:{\" \"}\r\n \r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {this.state.enableSubmit && (\r\n <>{this.determineButtonText(selectedProPlan)}\r\n )}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n Due Today:{\" \"}\r\n \r\n
\r\n
\r\n \r\n ${this.dueToday(selectedProPlan)}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderTOS(selectedProPlan)}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {this.determineSelectedInfo(selectedProPlan)}\r\n
\r\n
\r\n
\r\n {!this.state.changePlanActive && (\r\n this.setState({ changePlanActive: true })}\r\n className=\"change-plan-label\"\r\n >\r\n Change Your Plan\r\n

\r\n )}\r\n {this.state.changePlanActive &&\r\n this.state.proPlans.map((plan) =>\r\n this.renderPlanEntry(plan)\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \"Appreciate you guys so much. I’ve used hundreds of your\r\n video resources in weekly messages to youth, kids and\r\n adults. Best resources out there\"\r\n \r\n
\r\n Phil Kleins\r\n
\r\n
\r\n \r\n \"SermonCentral has DRASTICALLY sped up my sermons from\r\n idea-gathering to outlining to presentation. I am SO\r\n thankful for your help.\"\r\n \r\n
\r\n Michael Dean\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n","\r\nimport { ServerResponse, WebClient } from '../services/ServiceHelper';\r\n\r\nexport class AccountService {\r\n public static async hasPayPal() {\r\n\r\n var response = await WebClient.Get(\"api/Account/HasPayPal\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n public static async hasHadTrial() {\r\n var response = await WebClient.Get(\"api/Account/HasHadTrial\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n public static async hasHadMakerTrial() {\r\n var response = await WebClient.Get(\"api/Account/HasHadMakerTrial\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n}","export const InputHelper = {\r\n onkeyDownNumbersOnly: (\r\n e: React.KeyboardEvent,\r\n currentValue: string,\r\n maxLength?: number\r\n ) => {\r\n // If Backspace (8), Delete (46), Arrows (37, 38, 39, 40), or Tab (9), let thru too\r\n if (\r\n e.keyCode !== 8 &&\r\n e.keyCode !== 46 &&\r\n e.keyCode !== 37 &&\r\n e.keyCode !== 38 &&\r\n e.keyCode !== 39 &&\r\n e.keyCode !== 40 &&\r\n e.keyCode !== 9\r\n ) {\r\n let key = Number(e.key);\r\n\r\n if (maxLength && currentValue.length === maxLength) {\r\n e.preventDefault();\r\n }\r\n\r\n if (isNaN(key) || e.key === null) {\r\n e.preventDefault();\r\n }\r\n }\r\n },\r\n onBlurPadLeftZero: (e: React.FocusEvent, value: string) => {\r\n if (value.length === 1) {\r\n return 0 + value;\r\n } else {\r\n return value;\r\n }\r\n },\r\n};\r\n\r\nexport default InputHelper;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport { AccountService } from \"../../services/AccountService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\nimport { TaxService } from \"../../services/TaxService\";\r\nimport InputHelper from \"../../utilities/InputHelpers\";\r\nimport { ValidateInput } from \"../../utilities/subscribe/validateInput\";\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nconst postProTransaction = (user: ApplicationUser) => {\r\n const proSubscription = user.proSubscription;\r\n if (\"gtag\" in window) {\r\n window.gaItem = {\r\n id: \"2c92a0fb501f2f53015021c3b9082cf1\",\r\n name: proSubscription?.planName,\r\n brand: \"SermonCentral\",\r\n category: \"PRO Subscription\",\r\n quantity: \"1\",\r\n price: proSubscription?.nextBillPrice,\r\n };\r\n window.gaTransaction = {\r\n transaction_id: user.id,\r\n affiliation: \"SermonCentralPro\",\r\n value: proSubscription?.nextBillPrice,\r\n currency: user.currency || \"USD\",\r\n shipping: \"0\",\r\n tax: \"0\",\r\n items: [window.gaItem],\r\n coupon: \"\",\r\n };\r\n\r\n gtag(\"event\", \"purchase\", window.gaTransaction);\r\n }\r\n};\r\n\r\ninterface Props {\r\n config: AppConfig;\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\nexport function SubscribeCreateBundledMakerAccount(props: Props) {\r\n const [errors, setErrors] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [proPlan, setProPlan] = useState(undefined);\r\n const [creditCardNumber, setCardNumber] = useState(\"\");\r\n const [cv2, setCv2] = useState(\"\");\r\n const [expiryMonth, setExpiryMonth] = useState(\"\");\r\n const [expiryYear, setExpiryYear] = useState(\"\");\r\n const [postalCode, setPostalCode] = useState(\"\");\r\n const [enable, setEnabled] = useState(true);\r\n const [hasHadProTrial, setHasHadProTrial] = useState(false);\r\n const [hasHadMakerTrial, setHasHadMakerTrial] = useState(false);\r\n const [countries, setCountries] = useState([]);\r\n const [showCountries, setShowCountries] = useState(false);\r\n const [validatedPostalCodeLocation, setValidatedPostalCodeLocation] =\r\n useState(undefined);\r\n const [selectedCountryShortCode, setSelectedCountryShortCode] = useState<\r\n string | undefined\r\n >(undefined);\r\n const [taxAmount, setTaxAmount] = useState(0);\r\n\r\n useEffect(() => {\r\n async function mountBundle() {\r\n const results = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n AccountService.hasHadTrial(),\r\n AccountService.hasHadMakerTrial(),\r\n ProSubscriptionService.getCountries(),\r\n ]);\r\n\r\n const [\r\n planResults,\r\n hasHadProTrailResult,\r\n hasHadMakerTrialResult,\r\n locationResult,\r\n ] = results;\r\n let plan = planResults.find((p) => p.id === \"AnnualPlus\");\r\n if (!plan) {\r\n const planError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\r\n \"We were unable to retrieve the PRO plan. Please try again.\",\r\n ],\r\n };\r\n setErrors([planError]);\r\n } else {\r\n setProPlan(plan);\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n setErrors([serverError]);\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n setCountries(locationResult.data);\r\n }\r\n\r\n setHasHadMakerTrial(hasHadMakerTrialResult);\r\n setHasHadProTrial(hasHadProTrailResult);\r\n setLoading(false);\r\n }\r\n mountBundle();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!loading) {\r\n window.top.postMessage(\r\n { message: \"loadingCompleted\", height: document.body.scrollHeight },\r\n \"*\"\r\n );\r\n }\r\n }, [loading]);\r\n\r\n const checkTax = async (postalCode: string) => {\r\n const selectedProPlan = proPlan;\r\n\r\n if (!selectedProPlan) {\r\n return;\r\n }\r\n\r\n let totalPrice = ProSubscriptionService.getProPlanPriceIncludingDiscount(\r\n selectedProPlan,\r\n undefined\r\n );\r\n\r\n var taxRequest = await TaxService.getTaxAmount(\r\n postalCode,\r\n true,\r\n +totalPrice\r\n );\r\n\r\n setTaxAmount(taxRequest == null ? 0 : taxRequest);\r\n };\r\n\r\n const validateExpiryMonth = () => {\r\n var validationError = ValidateInput.CreditCardExpiryMonth(expiryMonth);\r\n\r\n if (validationError != null) {\r\n setErrors([validationError]);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n const validateExpiryYear = () => {\r\n var validationError = ValidateInput.CreditCardExpiryYear(expiryYear);\r\n\r\n if (validationError != null) {\r\n setErrors([validationError]);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n const handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!enable) {\r\n return;\r\n }\r\n\r\n if (!validateExpiryMonth()) {\r\n return;\r\n }\r\n\r\n if (!validateExpiryYear()) {\r\n return;\r\n }\r\n\r\n if (postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"CreditCardPostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n setErrors([serverError]);\r\n return;\r\n } else {\r\n if (selectedCountryShortCode) {\r\n setValidatedPostalCodeLocation({\r\n country: selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: postalCode,\r\n });\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n setErrors([serverError]);\r\n setShowCountries(true);\r\n return;\r\n } else {\r\n setValidatedPostalCodeLocation(postalCodeLocation);\r\n }\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n async function submitData() {\r\n const postalLocation = validatedPostalCodeLocation!;\r\n const expirationYear: number =\r\n expiryYear.length === 4 ? Number(expiryYear) : Number(20 + expiryYear);\r\n const expirationMonth: number = Number(expiryMonth);\r\n\r\n setEnabled(false);\r\n const response =\r\n await ProSubscriptionService.bundleAnnualPlusAndSermonMaker(\r\n creditCardNumber,\r\n cv2,\r\n expirationMonth,\r\n expirationYear,\r\n postalLocation.postalCode,\r\n postalLocation.region,\r\n postalLocation.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n postProTransaction(response.data);\r\n window.top.postMessage({ message: \"bundleCreated\" }, \"*\");\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n setErrors([serverError]);\r\n setEnabled(true);\r\n } else {\r\n setErrors(response.errors);\r\n setEnabled(true);\r\n }\r\n } else if (ServerResponse.isModelValidation(response)) {\r\n setErrors(response.errors);\r\n setEnabled(true);\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n setErrors([serverError]);\r\n setEnabled(true);\r\n }\r\n }\r\n\r\n if (validatedPostalCodeLocation) {\r\n submitData();\r\n }\r\n }, [validatedPostalCodeLocation]);\r\n\r\n const determineTrialText = () => {\r\n if (hasHadProTrial && hasHadMakerTrial)\r\n return \". You accounts will be billed today and activate with full benefits. \";\r\n\r\n if (hasHadProTrial && !hasHadMakerTrial) {\r\n return \". After 14 days, your Sermon Maker account will bill and activate with full benefits. \";\r\n }\r\n\r\n if (!hasHadProTrial && hasHadMakerTrial) {\r\n return \". After 14 days, your SermonCentral Pro account will bill and activate with full benefits. \";\r\n }\r\n\r\n return \". After 14 days, your accounts will bill and activate with full benefits. \";\r\n };\r\n\r\n if (loading) {\r\n return (\r\n
\r\n \r\n \r\n \r\n Loading...\r\n
\r\n
\r\n Fetching Bundle Plan...\r\n
\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {FieldValidationError.hasGenericError(errors) && (\r\n \r\n )}\r\n
\r\n {proPlan && (\r\n
\r\n
\r\n
\r\n \r\n PRO Plus\r\n
\r\n \r\n
\r\n Billed Annually\r\n
\r\n \r\n ${proPlan.price} {!hasHadProTrial && \" ($0 Today)\"}\r\n
\r\n {taxAmount > 0 && (\r\n \r\n *{proPlan.price + taxAmount} including tax\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n Sermon Maker\r\n
\r\n \r\n
\r\n Billed Monthly\r\n
\r\n \r\n $9.99 {!hasHadMakerTrial && \" ($0 Today)\"}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n Your Billing Details\r\n
\r\n
\r\n
\r\n
\r\n setCardNumber(e.target.value)}\r\n onKeyDown={(e) =>\r\n InputHelper.onkeyDownNumbersOnly(e, creditCardNumber)\r\n }\r\n />\r\n
\r\n
\r\n
\r\n setExpiryMonth(e.target.value)}\r\n onKeyDown={(e) =>\r\n InputHelper.onkeyDownNumbersOnly(e, expiryMonth, 2)\r\n }\r\n onBlur={(e) =>\r\n setExpiryMonth(\r\n InputHelper.onBlurPadLeftZero(e, expiryMonth)\r\n )\r\n }\r\n />\r\n \r\n /\r\n \r\n setExpiryYear(e.target.value)}\r\n onKeyDown={(e) =>\r\n InputHelper.onkeyDownNumbersOnly(e, expiryYear, 2)\r\n }\r\n onBlur={(e) =>\r\n setExpiryYear(\r\n InputHelper.onBlurPadLeftZero(e, expiryYear)\r\n )\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"CreditCardNumber\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"CreditCardExpirationMonth\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"CreditCardExpirationYear\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n setPostalCode(e.target.value)}\r\n onBlur={(e) => checkTax(e.target.value as string)}\r\n />\r\n
\r\n
\r\n setCv2(e.target.value)}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"CreditCardPostalCode\"\r\n ) && (\r\n \r\n )}\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"CreditCardSecurityCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n {showCountries && (\r\n
\r\n
\r\n setSelectedCountryShortCode(e.target.value)}\r\n >\r\n \r\n {countries.map((c) => (\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n )}\r\n
\r\n \r\n {enable ? (\r\n !hasHadProTrial || !hasHadMakerTrial ? (\r\n \"Start Your Free Trial!\"\r\n ) : (\r\n \"Sign up\"\r\n )\r\n ) : (\r\n <>\r\n PLEASE WAIT\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n By signing up, you are agreeing to our{\" \"}\r\n \r\n Terms of Service\r\n \r\n {determineTrialText()}\r\n Your PRO Plus account and your Sermon Maker account\r\n will bill as distinct charges and can be canceled any time.\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n","import { LocationDescriptor } from \"history\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport { AuthenticationService } from \"../../services/AuthenticationService\";\r\nimport { getParameterByName } from \"../../services/ServiceHelper\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser | null;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n};\r\n\r\nexport default class SubscribeRouter extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Subscribe\";\r\n\r\n let redirectState = this.props.location.state || {};\r\n let email = getParameterByName(\"email\");\r\n if (!email) {\r\n email = (redirectState as any).email;\r\n }\r\n let fullAccountSinglePage = getParameterByName(\"full-account\");\r\n if (!fullAccountSinglePage) {\r\n fullAccountSinglePage = (redirectState as any).fullAccountSinglePage;\r\n }\r\n\r\n let fullAccountQuickSetup = getParameterByName(\"quick-setup\");\r\n if (!fullAccountQuickSetup) {\r\n fullAccountQuickSetup = (redirectState as any).fullAccountQuickSetup;\r\n }\r\n\r\n let fullAccountEmbed = getParameterByName(\"embed\");\r\n if (!fullAccountEmbed) {\r\n fullAccountEmbed = (redirectState as any).fullAccountEmbed;\r\n }\r\n\r\n // We're making the assumption that if an email is passed in (through a form submission in Unbounce), the user may or may not know\r\n // that they have an SC account, or that their changes affect their SC account. So we make sure to sign out the user, if they're signed in,\r\n // and if the email matches an existing account, we force the user to sign in again, before they can enter their billing info\r\n if (email) {\r\n if (this.props.user) {\r\n await AuthenticationService.signOut();\r\n this.props.handleUpdateUser(null);\r\n }\r\n\r\n const isExistingUser = await AuthenticationService.getIsExistingUser(\r\n email!\r\n );\r\n\r\n if (isExistingUser) {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/auth-challenge\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else {\r\n if (fullAccountSinglePage) {\r\n // Caleb page for single full account page\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/create-full-account\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else if (fullAccountQuickSetup) {\r\n // Caleb page for single full account page\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/quick-setup\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else if (fullAccountEmbed) {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/embed\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/create-account\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n // If the user is signed in, check for an existing PRO subscription. A user cannot sign up for a new PRO sub while they still have a non-expired\r\n // PRO sub. So redirect them to a page that let's them know they're good to go\r\n else if (this.props.user) {\r\n if (this.props.user.proSubscription) {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/already-a-member\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else {\r\n if ((redirectState as any).embed) {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/embed\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/billing-info\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n }\r\n }\r\n } else {\r\n if (fullAccountSinglePage) {\r\n // Caleb page for single full account page\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/create-full-account\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else if (fullAccountQuickSetup) {\r\n // Caleb page for single full account page\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/quick-setup\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else if (fullAccountEmbed) {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/embed\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n } else {\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/subscribe/create-account\",\r\n state: this.getCombinedRedirectState(redirectState),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n getCombinedRedirectState(existingRedirectState: any) {\r\n let redirectState = existingRedirectState || {};\r\n\r\n if (getParameterByName(\"email\")) {\r\n redirectState[\"email\"] = getParameterByName(\"email\");\r\n }\r\n\r\n if (getParameterByName(\"firstName\")) {\r\n redirectState[\"firstName\"] = getParameterByName(\"firstName\");\r\n }\r\n\r\n if (getParameterByName(\"lastName\")) {\r\n redirectState[\"lastName\"] = getParameterByName(\"lastName\");\r\n }\r\n\r\n if (getParameterByName(\"phoneNumber\")) {\r\n redirectState[\"phoneNumber\"] = getParameterByName(\"phoneNumber\");\r\n }\r\n\r\n if (getParameterByName(\"pageTemplate\")) {\r\n redirectState[\"pageTemplate\"] = getParameterByName(\"pageTemplate\");\r\n }\r\n\r\n if (getParameterByName(\"ref\")) {\r\n redirectState[\"url_ref\"] = getParameterByName(\"ref\");\r\n }\r\n\r\n if (getParameterByName(\"url_ref\")) {\r\n redirectState[\"url_ref\"] = getParameterByName(\"url_ref\");\r\n }\r\n\r\n if (getParameterByName(\"utm_promo\")) {\r\n redirectState[\"utm_promo\"] = getParameterByName(\"utm_promo\");\r\n }\r\n\r\n if (getParameterByName(\"utm_source\")) {\r\n redirectState[\"utm_source\"] = getParameterByName(\"utm_source\");\r\n }\r\n\r\n if (getParameterByName(\"utm_campaign\")) {\r\n redirectState[\"utm_campaign\"] = getParameterByName(\"utm_campaign\");\r\n }\r\n\r\n if (getParameterByName(\"utm_medium\")) {\r\n redirectState[\"utm_medium\"] = getParameterByName(\"utm_medium\");\r\n }\r\n\r\n if (getParameterByName(\"utm_content\")) {\r\n redirectState[\"utm_content\"] = getParameterByName(\"utm_content\");\r\n }\r\n\r\n if (getParameterByName(\"pre_selected_plan\")) {\r\n redirectState[\"pre_selected_plan\"] =\r\n getParameterByName(\"pre_selected_plan\");\r\n }\r\n\r\n if (getParameterByName(\"excludeTrial\")) {\r\n redirectState[\"excludeTrial\"] = getParameterByName(\"excludeTrial\");\r\n }\r\n\r\n if (getParameterByName(\"returnUrl\")) {\r\n redirectState[\"returnUrl\"] = getParameterByName(\"returnUrl\");\r\n }\r\n\r\n if (getParameterByName(\"fullName\")) {\r\n redirectState[\"fullName\"] = getParameterByName(\"fullName\");\r\n }\r\n\r\n if (getParameterByName(\"embed\")) {\r\n redirectState[\"embed\"] = getParameterByName(\"embed\");\r\n }\r\n\r\n return redirectState;\r\n }\r\n\r\n render() {\r\n if (this.state.redirectTo) {\r\n return ;\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus, ProSubscriptionTier } from '../../entities/ProSubscription';\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n};\r\n\r\nexport default class CantUpgradeSubscription extends React.Component {\r\n\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Cannot Upgrade PRO Membership\";\r\n\r\n if (!this.props.user.proSubscription) {\r\n\r\n this.setState({ redirectTo: { pathname: '/upgrade', state: this.redirectState } });\r\n }\r\n\r\n else if (this.props.user.proSubscription.term !== ProSubscriptionTerm.None \r\n && this.props.user.proSubscription.status === ProSubscriptionStatus.Active\r\n && this.props.user.proSubscription.tier !== ProSubscriptionTier.Premium) {\r\n\r\n this.setState({ redirectTo: { pathname: '/upgrade', state: this.redirectState } });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else {\r\n const subscription = this.props.user.proSubscription;\r\n return (\r\n
\r\n\r\n
\r\n
\r\n
\r\n

Cannot Upgrade PRO Membership

\r\n
\r\n {subscription?.term === ProSubscriptionTerm.None && !subscription?.serviceStopDate &&\r\n <> As a Site Administrator, you already have access to PRO Premium benefits.\r\n }\r\n {subscription?.term === ProSubscriptionTerm.None && subscription?.serviceStopDate &&\r\n <> Your Free Contributor PRO gives you access to PRO Premium benefits until {new Date(subscription?.serviceStopDate).toLocaleDateString()}.\r\n }\r\n {subscription?.term !== ProSubscriptionTerm.None && subscription?.tier === ProSubscriptionTier.Premium &&\r\n <> You cannot upgrade your subscription to PRO Premium because you already have PRO Premium membership.\r\n }\r\n {subscription?.serviceStopDate && subscription?.status !== ProSubscriptionStatus.Active &&\r\n <> Your subscription has been canceled. Your will be able to sign up for a new subscription on {new Date(subscription.serviceStopDate).toLocaleDateString()}.\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n );\r\n }\r\n }\r\n}","import * as React from 'react';\r\nimport { Link, RouteComponentProps, Redirect } from 'react-router-dom';\r\n\r\nimport ApplicationUser from '../../entities/ApplicationUser';\r\nimport AppConfig from '../../entities/AppConfig';\r\n\r\ninterface Props extends RouteComponentProps<{ id: string }> {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n}\r\n\r\ntype State = {\r\n redirectToUpgrade: boolean;\r\n upgradedFromTrial: boolean;\r\n returnUrl: string;\r\n};\r\n\r\ndeclare const window: any;\r\ndeclare const gtag: any;\r\n\r\nexport default class UpgradeConfirmation extends React.Component {\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectToUpgrade: false,\r\n upgradedFromTrial: false,\r\n returnUrl: this.props.config.mainSiteUrl\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Upgrade Confirmation\";\r\n\r\n let redirectState = this.props.location.state;\r\n\r\n // Unlikely scenario, but user shouldn't be on this page unless they've been redirected, \r\n // so redirect back to /upgrade\r\n if (!redirectState || !this.props.user.proSubscription || !((redirectState as any).redirectedFromUpgradeTrial || (redirectState as any).redirectedFromUpgradeTier)) {\r\n this.setState({\r\n redirectToUpgrade: true\r\n });\r\n return;\r\n }\r\n\r\n if ((redirectState as any).redirectedFromUpgradeTrial) {\r\n this.setState({\r\n upgradedFromTrial: true\r\n });\r\n }\r\n\r\n if ((redirectState as any).returnUrl) {\r\n this.setState({\r\n returnUrl: (redirectState as any).returnUrl\r\n });\r\n }\r\n\r\n const costOfUpgradeForEcommerce: number | undefined = (redirectState as any).costOfUpgradeForEcommerce;\r\n\r\n setTimeout(() => {\r\n\r\n\r\n if ('gtag' in window) {\r\n\r\n var proSubscription = this.props.user.proSubscription;\r\n const planName = proSubscription?.planName ?? '';\r\n var sku = '';\r\n if (planName.indexOf('Premium') >= 0) {\r\n sku = '2c92a0fd61e79fd40161fc8fd3264af7';\r\n }\r\n else if (planName.indexOf('Basic') >= 0) {\r\n sku = '2c92a0fe631cf034016321a3a6ee256c';\r\n }\r\n else if (planName.indexOf('Monthly') >= 0) {\r\n sku = '2c92a0fb501f2f53015021c3b91c2cf3';\r\n }\r\n else {\r\n sku = '2c92a0fb501f2f53015021c3b9082cf1';\r\n }\r\n\r\n window.gaItem = {\r\n \"id\": sku,\r\n \"name\": \"PRO Upgrade\",\r\n \"brand\": \"SermonCentral\",\r\n \"category\": \"PRO Subscription\",\r\n \"quantity\": \"1\",\r\n \"price\": costOfUpgradeForEcommerce ? costOfUpgradeForEcommerce : proSubscription?.planPrice,\r\n };\r\n window.gaTransaction = {\r\n \"transaction_id\": this.props.user.id,\r\n \"affiliation\": \"SermonCentralPro\",\r\n \"value\": proSubscription?.planPrice,\r\n \"currency\": \"USD\",\r\n \"shipping\": \"0\",\r\n \"tax\": \"0\",\r\n \"items\": [\r\n window.gaItem\r\n ],\r\n \"coupon\": (redirectState as any).appliedPromoCode || ''\r\n };\r\n\r\n gtag('event', 'purchase', window.gaTransaction);\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectToUpgrade) {\r\n return ;\r\n }\r\n\r\n if (this.state.upgradedFromTrial) {\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for upgrading your trial subscription!

\r\n
\r\n Return to SermonCentral to use PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n else {\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Thank you for upgrading your PRO subscription!

\r\n
\r\n Return to SermonCentral to use PRO features, manage your subscription from your account dashboard, or view your PRO benefits.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n}","\r\nimport * as React from \"react\";\r\nimport { Link, RouteComponentProps, Redirect } from \"react-router-dom\";\r\nimport { LocationDescriptor } from \"history\";\r\n\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport { ProSubscriptionTerm, ProSubscriptionStatus, ProSubscriptionTier } from \"../../entities/ProSubscription\";\r\nimport { getParameterByName } from '../../services/ServiceHelper';\r\n\r\ninterface Props extends RouteComponentProps {\r\n config: AppConfig;\r\n user: ApplicationUser;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n redirectTo: LocationDescriptor | null;\r\n showGenericError: boolean;\r\n};\r\n\r\nexport default class UpgradeRouter extends React.Component {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n redirectTo: null,\r\n showGenericError: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n\r\n document.title = \"SermonCentral Payments - Upgrade\";\r\n\r\n try {\r\n let plan = getParameterByName('plan');\r\n let returnUrl = getParameterByName('returnUrl');\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n (this.redirectState as any).previousLocation = \"Upgrade\";\r\n this.setState({ redirectTo: { pathname: '/feature-unavailable', state: this.redirectState } });\r\n }\r\n\r\n else if (!this.props.user.proSubscription) {\r\n this.setState({ showGenericError: true });\r\n }\r\n else if (this.props.user.proSubscription.term === ProSubscriptionTerm.None) {\r\n this.setState({ redirectTo: { pathname: '/upgrade/cant-upgrade', state: this.redirectState } });\r\n }\r\n else if (this.props.user.proSubscription.status !== ProSubscriptionStatus.Active) {\r\n this.setState({ redirectTo: { pathname: '/upgrade/cant-upgrade', state: this.redirectState } });\r\n }\r\n else if (this.props.user.proSubscription.tier === ProSubscriptionTier.Premium) {\r\n this.setState({ redirectTo: { pathname: '/upgrade/cant-upgrade', state: this.redirectState } });\r\n }\r\n else if (!this.props.user.proSubscription.inTrial) {\r\n this.setState({ redirectTo: { pathname: `/upgrade/tier`, state: { returnUrl: returnUrl, plan: plan } } });\r\n }\r\n else if (this.props.user.proSubscription.inTrial) {\r\n this.setState({ redirectTo: { pathname: `/upgrade/from-trial`, state: { returnUrl: returnUrl } } });\r\n }\r\n else {\r\n this.setState({ showGenericError: true });\r\n }\r\n }\r\n catch {\r\n this.setState({ showGenericError: true });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n if (this.state.redirectTo) {\r\n return (\r\n \r\n );\r\n }\r\n else if (this.state.showGenericError) {\r\n return (\r\n
\r\n
\r\n

Something Went Wrong :'(

\r\n
Please contact our customer service team for help.
\r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { LocationDescriptor } from \"history\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport ProPlan from \"../../entities/ProPlan\";\r\nimport {\r\n ProSubscriptionStatus,\r\n ProSubscriptionTerm,\r\n ProSubscriptionTier,\r\n} from \"../../entities/ProSubscription\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n redirectTo: LocationDescriptor | null;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n creditCardType?: CreditCardType;\r\n enableSubmit: boolean;\r\n proPlans: ProPlan[];\r\n selectedProPlanId: string;\r\n upgradeToPremiumCost?: number;\r\n upgradeToPlusCost?: undefined | null | number;\r\n biennialUser: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n};\r\n\r\nexport default class UpgradeSubscriptionTier extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n redirectTo: null,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n enableSubmit: true,\r\n proPlans: [],\r\n selectedProPlanId: \"\",\r\n biennialUser: false,\r\n countries: [],\r\n showCountries: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Upgrade Trial Subscription\";\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n (this.redirectState as any).previousLocation = \"Upgrade Tier\";\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/feature-unavailable\",\r\n state: this.redirectState,\r\n },\r\n });\r\n }\r\n const subscription = this.props.user.proSubscription;\r\n\r\n if (!subscription || subscription.inTrial) {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n } else if (subscription.term === ProSubscriptionTerm.None) {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n } else if (subscription.status !== ProSubscriptionStatus.Active) {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n } else if (subscription.tier === ProSubscriptionTier.Premium) {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n } else if (\r\n subscription.tier === ProSubscriptionTier.Plus &&\r\n subscription.term === ProSubscriptionTerm.Biennial\r\n ) {\r\n this.setState({ biennialUser: true, loading: false });\r\n } else {\r\n let redirectState = this.props.location.state || {};\r\n\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getProPlans(),\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n const [proPlansResult, locationResult, creditCardsResult] = responses;\r\n\r\n this.setState({ loading: false });\r\n\r\n if (ServerResponse.isError(proPlansResult) || !proPlansResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve plans. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n let plans = [...proPlansResult];\r\n\r\n var userProPlan = plans.find(\r\n (p) => p.term === subscription.term && p.tier === subscription.tier\r\n )!;\r\n\r\n if (\r\n (userProPlan.term === ProSubscriptionTerm.Monthly &&\r\n userProPlan.tier === ProSubscriptionTier.Plus) ||\r\n userProPlan.tier === ProSubscriptionTier.Basic\r\n ) {\r\n plans = plans.filter(\r\n (p) => p.id === \"AnnualPlus\" || p.id === \"AnnualPremium\"\r\n );\r\n } else if (\r\n (userProPlan.term === ProSubscriptionTerm.Annual ||\r\n userProPlan.term === ProSubscriptionTerm.Biennial) &&\r\n userProPlan.tier === ProSubscriptionTier.Plus\r\n ) {\r\n plans = plans.filter((p) => p.id === \"AnnualPremium\");\r\n } else {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n }\r\n\r\n var selectedProPlanId = \"AnnualPremium\";\r\n if (\r\n (redirectState as any).plan === \"plus\" &&\r\n plans.find((p) => p.id === \"AnnualPlus\")\r\n ) {\r\n selectedProPlanId = \"AnnualPlus\";\r\n }\r\n\r\n this.setState({\r\n selectedProPlanId: selectedProPlanId,\r\n proPlans: plans,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find((cc) => cc.useCardByDefault);\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n\r\n CreditCardService.getCreditCards().then((creditCards) => {\r\n if (creditCards && creditCards.length > 0) {\r\n var defaultCard = creditCards.find((cc) => cc.useCardByDefault);\r\n this.setState({\r\n existingCreditCards: creditCards,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCards[0].id,\r\n loading: false,\r\n });\r\n } else {\r\n this.setState({ loading: false });\r\n }\r\n });\r\n\r\n ProSubscriptionService.getUpgradeToProPremiumCost().then(\r\n async (upgradeToPremiumCost) => {\r\n this.setState({ upgradeToPremiumCost });\r\n const response =\r\n await ProSubscriptionService.getUpgradeToProPlusCost();\r\n if (ServerResponse.isSuccess(response)) {\r\n this.setState({ upgradeToPlusCost: response.data });\r\n } else {\r\n this.setState({ upgradeToPlusCost: null });\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n let costOfUpgradeForEcommerce: number | undefined;\r\n\r\n let response;\r\n\r\n if (this.state.selectedProPlanId === \"AnnualPlus\") {\r\n response = await ProSubscriptionService.upgradeToProPlus(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.validatedPostalCodeLocation\r\n ? this.state.postalCode\r\n : this.state.postalCode,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n costOfUpgradeForEcommerce = this.state.upgradeToPlusCost ?? undefined;\r\n } else if (this.state.selectedProPlanId === \"AnnualPremium\") {\r\n response = await ProSubscriptionService.upgradeToProPremium(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.validatedPostalCodeLocation\r\n ? this.state.postalCode\r\n : this.state.postalCode,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n costOfUpgradeForEcommerce = this.state.upgradeToPremiumCost;\r\n }\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n\r\n if (this.props.location.state) {\r\n this.redirectState = {\r\n returnUrl: (this.props.location.state as any).returnUrl,\r\n };\r\n }\r\n\r\n (this.redirectState as any).redirectedFromUpgradeTier = true;\r\n\r\n if (costOfUpgradeForEcommerce) {\r\n (this.redirectState as any).costOfUpgradeForEcommerce =\r\n costOfUpgradeForEcommerce;\r\n }\r\n\r\n this.setState({\r\n errors: [],\r\n redirectTo: {\r\n pathname: \"/upgrade/confirmation\",\r\n state: this.redirectState,\r\n },\r\n });\r\n return;\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n getPlanPrice(plan: ProPlan) {\r\n if (plan.tier === ProSubscriptionTier.Plus) {\r\n return this.state.upgradeToPlusCost;\r\n } else if (plan.tier === ProSubscriptionTier.Premium) {\r\n return this.state.upgradeToPremiumCost;\r\n } else {\r\n return plan.price;\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.redirectTo) {\r\n return ;\r\n }\r\n\r\n if (this.state.loading) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (this.state.biennialUser) {\r\n return (\r\n
\r\n
\r\n
\r\n

You're Grandfathered!

\r\n
\r\n Please contact support at 1-(866)-899-4426 or{\" \"}\r\n \r\n Contact Us\r\n {\" \"}\r\n and we'll set you up on one of our current PRO plans.\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const selectedProPlan = this.state.proPlans.find(\r\n (p) => p.id === this.state.selectedProPlanId\r\n );\r\n const defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n const upgradePriceEstimateFailed =\r\n this.state.upgradeToPlusCost === null ||\r\n this.state.upgradeToPremiumCost === null;\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n
\r\n Your default card will be updated to the card you\r\n selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n \r\n )}\r\n \r\n {this.state.enableSubmit && <>UPGRADE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n {upgradePriceEstimateFailed && (\r\n

\r\n We were unable to automatically upgrade your plan. Contact\r\n our{\" \"}\r\n \r\n customer service\r\n {\" \"}\r\n team for help.\r\n

\r\n )}\r\n

\r\n Please note that your subscription will renew automatically\r\n unless you cancel prior to renewal. We may contact you with\r\n important information regarding your PRO subscription.\r\n Standard data fees and text messaging rates may apply based\r\n on your plan with your mobile phone carrier.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Upgrade your Subscription\r\n
\r\n
\r\n
\r\n {this.props.user.proSubscription?.tier ===\r\n ProSubscriptionTier.Basic && (\r\n

\r\n Upgrade your subscription from Pro Basic to Plus to access\r\n unlimited media or to Premium to access unlimited media and\r\n sermon kits!\r\n

\r\n )}\r\n {this.props.user.proSubscription?.tier ===\r\n ProSubscriptionTier.Plus &&\r\n this.props.user.proSubscription.term ===\r\n ProSubscriptionTerm.Monthly && (\r\n

\r\n Upgrade your subscription from Pro Plus Monthly to Plus\r\n Annually to access unlimited media downloads or to Premium\r\n to access unlimited media and sermon kits!\r\n

\r\n )}\r\n {this.props.user.proSubscription?.tier ===\r\n ProSubscriptionTier.Plus &&\r\n this.props.user.proSubscription.term ===\r\n ProSubscriptionTerm.Annual && (\r\n

\r\n Upgrade your subscription from Pro Plus to Premium to\r\n access sermon kits!\r\n

\r\n )}\r\n {this.state.proPlans.map((plan) => (\r\n
\r\n \r\n this.setState({ selectedProPlanId: plan.id })\r\n }\r\n onClick={() =>\r\n this.setState({ selectedProPlanId: plan.id })\r\n }\r\n disabled={upgradePriceEstimateFailed}\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from our\r\n registration page to our secure servers encrypted for your\r\n protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { LocationDescriptor } from \"history\";\r\nimport * as React from \"react\";\r\nimport { Redirect, RouteComponentProps } from \"react-router-dom\";\r\nimport AppConfig from \"../../entities/AppConfig\";\r\nimport ApplicationUser from \"../../entities/ApplicationUser\";\r\nimport Country from \"../../entities/Country\";\r\nimport CreditCard from \"../../entities/CreditCard\";\r\nimport { CreditCardType } from \"../../entities/CreditCardType\";\r\nimport PostalCodeLocation from \"../../entities/PostalCodeLocation\";\r\nimport SSLLogo from \"../../resources/ssl.png\";\r\nimport { CreditCardService } from \"../../services/CreditCardService\";\r\nimport { PostalCodeService } from \"../../services/PostalCodeService\";\r\nimport { ProSubscriptionService } from \"../../services/ProSubscriptionService\";\r\nimport {\r\n FieldValidationError,\r\n ServerModelValidationResponse,\r\n ServerResponse,\r\n} from \"../../services/ServiceHelper\";\r\n\r\ninterface Props extends RouteComponentProps {\r\n user: ApplicationUser;\r\n config: AppConfig;\r\n handleUpdateUser: (user: ApplicationUser | null) => void;\r\n hasPaypal: boolean;\r\n}\r\n\r\ntype State = {\r\n loading: boolean;\r\n redirectTo: LocationDescriptor | null;\r\n errors: FieldValidationError[];\r\n existingCreditCards: CreditCard[];\r\n selectedCreditCardId: string;\r\n showUseNewCardForm: boolean;\r\n nameOnCard: string;\r\n creditCardNumber: string;\r\n cv2: string;\r\n expirationMonth: number;\r\n expirationYear: number;\r\n postalCode: string;\r\n creditCardType?: CreditCardType;\r\n enableSubmit: boolean;\r\n countries: Country[];\r\n showCountries: boolean;\r\n validatedPostalCodeLocation?: PostalCodeLocation;\r\n selectedCountryShortCode?: string;\r\n};\r\n\r\nexport default class UpgradeSubscriptionTrial extends React.Component<\r\n Props,\r\n State\r\n> {\r\n redirectState: any = {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n redirectTo: null,\r\n errors: [],\r\n existingCreditCards: [],\r\n selectedCreditCardId: \"\",\r\n showUseNewCardForm: false,\r\n nameOnCard: \"\",\r\n creditCardNumber: \"\",\r\n cv2: \"\",\r\n expirationMonth: new Date().getMonth() + 1,\r\n expirationYear: new Date().getFullYear(),\r\n postalCode: \"\",\r\n enableSubmit: true,\r\n countries: [],\r\n showCountries: false,\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.title = \"SermonCentral Payments - Upgrade Trial Subscription\";\r\n\r\n let currency = this.props.user.currency;\r\n\r\n if (this.props.hasPaypal) {\r\n (this.redirectState as any).previousLocation = \"Upgrade Trial\";\r\n this.setState({\r\n redirectTo: {\r\n pathname: \"/feature-unavailable\",\r\n state: this.redirectState,\r\n },\r\n });\r\n }\r\n\r\n if (\r\n !this.props.user.proSubscription ||\r\n !this.props.user.proSubscription.inTrial\r\n ) {\r\n this.setState({\r\n redirectTo: { pathname: \"/upgrade\", state: this.redirectState },\r\n });\r\n } else {\r\n const responses = await Promise.all([\r\n ProSubscriptionService.getCountries(),\r\n CreditCardService.getCreditCards(),\r\n ]);\r\n\r\n const [locationResult, creditCardsResult] = responses;\r\n\r\n this.setState({ loading: false });\r\n\r\n if (ServerResponse.isError(locationResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve location. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else if (ServerResponse.isSuccess(locationResult)) {\r\n this.setState({\r\n countries: locationResult.data,\r\n });\r\n }\r\n\r\n if (ServerResponse.isError(creditCardsResult)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"Unable to retrieve credit cards. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n if (creditCardsResult && creditCardsResult.length > 0) {\r\n var defaultCard = creditCardsResult.find((cc) => cc.useCardByDefault);\r\n this.setState({\r\n existingCreditCards: creditCardsResult,\r\n selectedCreditCardId: defaultCard\r\n ? defaultCard.id\r\n : creditCardsResult[0].id,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleFormSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (!this.state.enableSubmit) {\r\n return;\r\n }\r\n\r\n // If user has existing cards on file, but none are selected, and not showing new card form, return\r\n if (\r\n this.state.existingCreditCards.length > 0 &&\r\n !this.state.selectedCreditCardId &&\r\n !this.state.showUseNewCardForm\r\n ) {\r\n return;\r\n }\r\n\r\n // If no existing cards on file or showing new card form, and any of the fields are not entered, return\r\n if (\r\n (this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) &&\r\n (!this.state.nameOnCard ||\r\n !this.state.creditCardNumber ||\r\n !this.state.cv2 ||\r\n !this.state.expirationMonth ||\r\n !this.state.expirationYear)\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n !this.state.showUseNewCardForm &&\r\n this.state.existingCreditCards.length > 0\r\n ) {\r\n this.submitData();\r\n } else if (this.state.postalCode.length === 0) {\r\n const serverError: FieldValidationError = {\r\n field: \"PostalCode\",\r\n errors: [\"Zip/Postal code is required\"],\r\n };\r\n this.setState({ errors: [serverError] });\r\n return;\r\n } else {\r\n if (this.state.selectedCountryShortCode) {\r\n this.setState(\r\n {\r\n validatedPostalCodeLocation: {\r\n country: this.state.selectedCountryShortCode,\r\n region: \"\",\r\n postalCode: this.state.postalCode,\r\n },\r\n },\r\n () => this.submitData()\r\n );\r\n } else {\r\n let postalCodeLocation = await PostalCodeService.getUSCanPostalCode(\r\n this.state.postalCode\r\n );\r\n\r\n if (postalCodeLocation === null) {\r\n const serverError: FieldValidationError = {\r\n field: \"UnknownPostalCode\",\r\n errors: [\"Please select your country\"],\r\n };\r\n this.setState({ showCountries: true, errors: [serverError] });\r\n return;\r\n } else {\r\n this.setState(\r\n { validatedPostalCodeLocation: postalCodeLocation },\r\n () => this.submitData()\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n submitData = async () => {\r\n try {\r\n this.setState({ enableSubmit: false });\r\n\r\n let response = await ProSubscriptionService.upgradeTrialToPaid(\r\n !this.state.showUseNewCardForm ? this.state.selectedCreditCardId : \"\",\r\n this.state.nameOnCard,\r\n this.state.creditCardNumber,\r\n this.state.cv2,\r\n this.state.expirationMonth,\r\n this.state.expirationYear,\r\n this.state.validatedPostalCodeLocation\r\n ? this.state.postalCode\r\n : this.state.postalCode,\r\n this.state.validatedPostalCodeLocation?.region,\r\n this.state.validatedPostalCodeLocation?.country\r\n );\r\n\r\n if (ServerResponse.isSuccess(response)) {\r\n this.props.handleUpdateUser(response.data);\r\n this.redirectState = {\r\n returnUrl: (this.props.location.state as any).returnUrl,\r\n redirectedFromUpgradeTrial: true,\r\n };\r\n this.setState({\r\n errors: [],\r\n redirectTo: {\r\n pathname: \"/upgrade/confirmation\",\r\n state: this.redirectState,\r\n },\r\n });\r\n } else if (\r\n ServerModelValidationResponse.isServerModelValidationResponse(response)\r\n ) {\r\n if (response.valid) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n this.setState({ errors: response.errors, enableSubmit: true });\r\n }\r\n } else if (ServerResponse.isError(response)) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [response.message],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n } else {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n } catch (errorResult) {\r\n const serverError: FieldValidationError = {\r\n field: \"\",\r\n errors: [\"An unknown error occurred. Please try again.\"],\r\n };\r\n this.setState({ errors: [serverError], enableSubmit: true });\r\n }\r\n };\r\n\r\n updateCv2 = (event: React.ChangeEvent) => {\r\n if (\r\n this.state.creditCardType &&\r\n this.state.creditCardType === CreditCardType.Amex\r\n ) {\r\n this.setState({ cv2: event.target.value.substr(0, 4) });\r\n } else {\r\n this.setState({ cv2: event.target.value.substr(0, 3) });\r\n }\r\n };\r\n\r\n updateCreditCard = (event: React.ChangeEvent) => {\r\n let cardNumber = event.target.value.replace(/[a-zA-Z\\-\\ ]+/g, \"\");\r\n let newCardNumber = \"\";\r\n let creditCardType;\r\n\r\n // American Express XXXX XXXXXX XXXXX\r\n if (cardNumber[0] === \"3\") {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 6);\r\n }\r\n\r\n if (cardNumber.length > 10) {\r\n newCardNumber += \" \" + cardNumber.substr(10, 5);\r\n }\r\n\r\n creditCardType = CreditCardType.Amex;\r\n }\r\n\r\n // Visa XXXX XXXX XXXX XXXX\r\n // Mastercard XXXX XXXX XXXX XXXX\r\n // Discover XXXX XXXX XXXX XXXX\r\n else if (\r\n cardNumber[0] === \"4\" ||\r\n cardNumber[0] === \"5\" ||\r\n cardNumber[0] === \"6\"\r\n ) {\r\n newCardNumber = cardNumber.substr(0, 4);\r\n if (cardNumber.length > 4) {\r\n newCardNumber += \" \" + cardNumber.substr(4, 4);\r\n }\r\n\r\n if (cardNumber.length > 8) {\r\n newCardNumber += \" \" + cardNumber.substr(8, 4);\r\n }\r\n\r\n if (cardNumber.length > 12) {\r\n newCardNumber += \" \" + cardNumber.substr(12, 4);\r\n }\r\n\r\n if (cardNumber[0] === \"4\") {\r\n creditCardType = CreditCardType.Visa;\r\n } else if (cardNumber[0] === \"5\") {\r\n creditCardType = CreditCardType.Mastercard;\r\n } else if (cardNumber[0] === \"6\") {\r\n creditCardType = CreditCardType.Discover;\r\n }\r\n }\r\n\r\n this.setState({ creditCardNumber: newCardNumber, creditCardType });\r\n };\r\n\r\n render() {\r\n if (this.state.redirectTo) {\r\n return ;\r\n }\r\n\r\n if (this.state.loading) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n var defaultCard = this.state.existingCreditCards.find(\r\n (cc) => cc.useCardByDefault\r\n );\r\n\r\n return (\r\n
\r\n {FieldValidationError.hasGenericError(this.state.errors) && (\r\n \r\n )}\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Billing Info
\r\n
\r\n
\r\n {this.state.existingCreditCards.length > 0 &&\r\n !this.state.showUseNewCardForm && (\r\n <>\r\n
\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: true });\r\n }}\r\n >\r\n use a new card\r\n \r\n \r\n
\r\n \r\n this.setState({\r\n selectedCreditCardId: e.target.value,\r\n })\r\n }\r\n >\r\n {this.state.existingCreditCards.map((cc) => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {this.state.selectedCreditCardId &&\r\n defaultCard &&\r\n this.state.selectedCreditCardId !==\r\n defaultCard.id && (\r\n
\r\n Your default card will be updated to the card you\r\n selected.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n {(this.state.existingCreditCards.length === 0 ||\r\n this.state.showUseNewCardForm) && (\r\n <>\r\n {this.state.existingCreditCards.length > 0 && (\r\n {\r\n e.preventDefault();\r\n this.setState({ showUseNewCardForm: false });\r\n }}\r\n >\r\n use an existing card\r\n \r\n )}\r\n
\r\n \r\n \r\n this.setState({ nameOnCard: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Amex) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Discover) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Mastercard) && (\r\n \r\n \r\n \r\n )}\r\n {(!this.state.creditCardType ||\r\n this.state.creditCardType ===\r\n CreditCardType.Visa) && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The 3 or 4 digits near the signature strip\r\n

\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n this.setState({\r\n expirationMonth: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(12).keys()].map((i) => {\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n this.setState({\r\n expirationYear: parseInt(e.target.value, 10),\r\n })\r\n }\r\n >\r\n {[...Array(10).keys()].map((i) => {\r\n var year = new Date().getFullYear();\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n this.setState({ postalCode: e.target.value })\r\n }\r\n />\r\n \r\n
\r\n
\r\n {this.state.showCountries && (\r\n
\r\n
\r\n
\r\n \r\n this.setState({\r\n selectedCountryShortCode: e.target.value,\r\n })\r\n }\r\n >\r\n \r\n {this.state.countries.map((c) => (\r\n \r\n {c.name}\r\n \r\n ))}\r\n \r\n
\r\n {FieldValidationError.isFieldInError(\r\n this.state.errors,\r\n \"UnknownPostalCode\"\r\n ) && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {this.state.existingCreditCards.length > 0 && (\r\n
\r\n Your default card will be updated to the card you\r\n enter.\r\n
\r\n )}\r\n \r\n )}\r\n\r\n \r\n {this.state.enableSubmit && <>UPGRADE}\r\n {!this.state.enableSubmit && (\r\n <>\r\n PLEASE WAIT...\r\n \r\n \r\n )}\r\n \r\n\r\n

\r\n Please note that your subscription will renew automatically\r\n unless you cancel prior to renewal. We may contact you with\r\n important information regarding your PRO subscription.\r\n Standard data fees and text messaging rates may apply based\r\n on your plan with your mobile phone carrier.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Upgrade From Trial\r\n
\r\n
\r\n
\r\n

\r\n Upgrade your trial to a paid subscription for unlimited media\r\n access and immediate paid PRO benefits!\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
SSL Secure Connection
\r\n \r\n This a secure transaction with all information sent from our\r\n registration page to our secure servers encrypted for your\r\n protection.\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { WebClient, ServerResponse } from '../services/ServiceHelper';\r\nimport AppConfig from '../entities/AppConfig';\r\n\r\nexport class AppConfigService {\r\n\r\n static async getAppConfig() {\r\n\r\n var response = await WebClient.Get(\"api/AppConfig\");\r\n if (ServerResponse.isSuccess(response)) {\r\n return response.data;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faCcAmex,\r\n faCcDiscover,\r\n faCcMastercard,\r\n faCcVisa,\r\n faExpeditedssl,\r\n faPaypal,\r\n} from \"@fortawesome/free-brands-svg-icons\";\r\nimport { faClock } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { faAngleDown, faTag } from \"@fortawesome/free-solid-svg-icons\";\r\nimport * as React from \"react\";\r\nimport { BrowserRouter, Redirect, Route, Switch } from \"react-router-dom\";\r\nimport \"../node_modules/bootstrap/dist/css/bootstrap.min.css\";\r\nimport \"./app.css\";\r\nimport AnalyticsPageTracker from \"./components/AnalyticsPageTracker\";\r\nimport { PrivateRoute } from \"./components/PrivateRoute\";\r\nimport AppConfig, { AppConfigEnvironment } from \"./entities/AppConfig\";\r\nimport ApplicationUser from \"./entities/ApplicationUser\";\r\nimport Layout from \"./layout\";\r\nimport SignIn from \"./pages/authentication/signIn\";\r\nimport CancelReason from \"./pages/cancel/cancelReason\";\r\nimport CantCancelSubscription from \"./pages/cancel/cantCancel\";\r\nimport CancelSubscriptionConfirmation from \"./pages/cancel/confirmation\";\r\nimport CancelSubscription from \"./pages/cancel/index\";\r\nimport DowngradeConfirmation from \"./pages/downgrade/confirmation\";\r\nimport FeatureUnavailable from \"./pages/featureUnavailable\";\r\nimport PurchaseChurchMediaSet from \"./pages/purchase/churchMediaSet\";\r\nimport PurchaseChurchMediaSetConfirmation from \"./pages/purchase/churchMediaSetConfirmation\";\r\nimport PurchaseChurchMediaSetSubscriptionConfirmation from \"./pages/purchase/churchMediaSetSubscriptionConfirmation\";\r\nimport CheckoutRouter from \"./pages/purchase/index\";\r\nimport PurchaseMediaItem from \"./pages/purchase/mediaItem\";\r\nimport PurchaseMediaItemConfirmation from \"./pages/purchase/mediaItemConfirmation\";\r\nimport PurchaseMediaItemSubscriptionConfirmation from \"./pages/purchase/mediaItemSubscriptionConfirmation\";\r\nimport PurchasePremiumSermonKit from \"./pages/purchase/PremiumSermonKit\";\r\nimport PurchasePremiumSermonKitConfirmation from \"./pages/purchase/PremiumSermonKitConfirmation\";\r\nimport PurchasePremiumSermonKitSubscriptionConfirmation from \"./pages/purchase/PremiumSermonKitSubscriptionConfirmation\";\r\nimport PurchaseSermonSeriesKit from \"./pages/purchase/sermonSeriesKit\";\r\nimport PurchaseSermonSeriesKitConfirmation from \"./pages/purchase/sermonSeriesKitConfirmation\";\r\nimport PurchaseSermonSeriesKitSubscriptionConfirmation from \"./pages/purchase/sermonSeriesKitSubscriptionConfirmation\";\r\nimport SubscribeAlreadyAMember from \"./pages/subscribe/alreadyAMember\";\r\nimport SubscribeAuthChallenge from \"./pages/subscribe/authChallenge\";\r\nimport SubscribeBillingInfo from \"./pages/subscribe/billingInfo\";\r\nimport SubscribeConfirmation from \"./pages/subscribe/confirmation\";\r\nimport SubscribeCreateAccount from \"./pages/subscribe/createAccount\";\r\nimport SubscribeCreateFullAccountEmbed from \"./pages/subscribe/createEmbedAccount\";\r\nimport SubscribeCreateFullAccountQuickSetup from \"./pages/subscribe/createFullAccountQuickSetup\";\r\nimport SubscribeCreateFullAccountSinglePage from \"./pages/subscribe/createFullAccountSinglePage\";\r\nimport { SubscribeCreateBundledMakerAccount } from \"./pages/subscribe/createMakerBundleAccount\";\r\nimport SubscribeRouter from \"./pages/subscribe/index\";\r\nimport CantUpgradeSubscription from \"./pages/upgrade/cantUpgrade\";\r\nimport UpgradeConfirmation from \"./pages/upgrade/confirmation\";\r\nimport UpgradeRouter from \"./pages/upgrade/index\";\r\nimport UpgradeSubscriptionTier from \"./pages/upgrade/upgradeTier\";\r\nimport UpgradeSubscriptionTrial from \"./pages/upgrade/upgradeTrial\";\r\nimport { AccountService } from \"./services/AccountService\";\r\nimport { AppConfigService } from \"./services/AppConfigService\";\r\nimport { AuthenticationService } from \"./services/AuthenticationService\";\r\n\r\nlibrary.add(faCcAmex);\r\nlibrary.add(faCcDiscover);\r\nlibrary.add(faCcMastercard);\r\nlibrary.add(faCcVisa);\r\nlibrary.add(faPaypal);\r\nlibrary.add(faExpeditedssl);\r\nlibrary.add(faAngleDown);\r\nlibrary.add(faTag);\r\nlibrary.add(faClock as any);\r\n\r\ninterface AppProps {\r\n baseUrl: string;\r\n}\r\n\r\ninterface AppState {\r\n loading: boolean;\r\n user: ApplicationUser | null;\r\n config: AppConfig | null;\r\n hasPaypal: boolean;\r\n}\r\n\r\nclass App extends React.Component {\r\n constructor(props: AppProps) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n user: null,\r\n config: {\r\n environment: AppConfigEnvironment.Production,\r\n googleAnalytics: {\r\n isEnabled: true,\r\n trackingId: \"UA-75701108-7\",\r\n },\r\n mainSiteUrl: \"https://www.sermoncentral.com\",\r\n accountSiteUrl: \"https://account.sermoncentral.com\",\r\n sermonMakerSiteUrl: \"https://maker.sermoncentral.com\",\r\n paymentsSiteUrl: \"https://payments.sermoncentral.com\",\r\n glooSubscriptionsUrl: \"https://app.gloo.us/settings/subscriptions\",\r\n },\r\n hasPaypal: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n AppConfigService.getAppConfig().then((config) => {\r\n if (config) {\r\n this.setState({ config: config });\r\n }\r\n });\r\n\r\n AuthenticationService.getAuthenticatedUser()\r\n .then((user) =>\r\n this.setState(\r\n {\r\n user: user,\r\n },\r\n () => {\r\n if (user) {\r\n AccountService.hasPayPal()\r\n .then((data) =>\r\n this.setState({ hasPaypal: data || false, loading: false })\r\n )\r\n .catch((error) => this.setState({ loading: false }));\r\n } else {\r\n this.setState({ loading: false });\r\n }\r\n }\r\n )\r\n )\r\n .catch((error) =>\r\n this.setState({\r\n user: null,\r\n loading: false,\r\n })\r\n );\r\n }\r\n\r\n handleUpdateUser(user: ApplicationUser | null) {\r\n this.setState(\r\n {\r\n user: user,\r\n },\r\n () => {\r\n if (user) {\r\n AccountService.hasPayPal().then((data) =>\r\n this.setState({ hasPaypal: data || false })\r\n );\r\n }\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n if (this.state.loading) {\r\n return (\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n hasPaypal={this.state.hasPaypal}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n (\r\n this.handleUpdateUser(user)}\r\n hasPaypal={this.state.hasPaypal}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n this.handleUpdateUser(user)}\r\n />\r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n (\r\n \r\n )}\r\n />\r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default App;\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport App from './app';\r\n\r\nimport axios from 'axios';\r\naxios.defaults.withCredentials = true;\r\n\r\nfunction renderApp() {\r\n const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href')!;\r\n ReactDOM.render(\r\n ,\r\n document.querySelector('#root')\r\n );\r\n}\r\n\r\nrenderApp();"],"sourceRoot":""}