@edx/frontend-app-subscription-manage 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +2 -2
- package/dist/app.js.map +1 -1
- package/dist/components/ActiveSubscription/ActiveSubscription.d.ts +7 -0
- package/dist/components/ActiveSubscription/ActiveSubscription.js +24 -0
- package/dist/components/ActiveSubscription/ActiveSubscription.js.map +1 -0
- package/dist/components/BecomeSubscriber/BecomeSubscriber.d.ts +7 -0
- package/dist/components/BecomeSubscriber/BecomeSubscriber.js +19 -0
- package/dist/components/BecomeSubscriber/BecomeSubscriber.js.map +1 -0
- package/dist/components/CancelConfirmation/CancelConfirmation.d.ts +12 -0
- package/dist/components/CancelConfirmation/CancelConfirmation.js +21 -0
- package/dist/components/CancelConfirmation/CancelConfirmation.js.map +1 -0
- package/dist/components/CancelSuccess/CancelSuccess.d.ts +7 -0
- package/dist/components/CancelSuccess/CancelSuccess.js +17 -0
- package/dist/components/CancelSuccess/CancelSuccess.js.map +1 -0
- package/dist/components/CanceledSubscription/CanceledSubscription.d.ts +13 -0
- package/dist/components/CanceledSubscription/CanceledSubscription.js +27 -0
- package/dist/components/CanceledSubscription/CanceledSubscription.js.map +1 -0
- package/dist/components/EnrolledCoursesList/EnrolledCoursesList.d.ts +8 -0
- package/dist/components/EnrolledCoursesList/EnrolledCoursesList.js +20 -0
- package/dist/components/EnrolledCoursesList/EnrolledCoursesList.js.map +1 -0
- package/dist/components/HelpFooter/HelpFooter.d.ts +3 -0
- package/dist/components/HelpFooter/HelpFooter.js +12 -0
- package/dist/components/HelpFooter/HelpFooter.js.map +1 -0
- package/dist/components/OrderHistoryHeader/OrderHistoryHeader.d.ts +3 -0
- package/dist/components/OrderHistoryHeader/OrderHistoryHeader.js +9 -0
- package/dist/components/OrderHistoryHeader/OrderHistoryHeader.js.map +1 -0
- package/dist/components/PaymentHistory/PaymentHistory.d.ts +10 -0
- package/dist/components/PaymentHistory/PaymentHistory.js +23 -0
- package/dist/components/PaymentHistory/PaymentHistory.js.map +1 -0
- package/dist/components/RenewSubscriptionModal/RenewSubscriptionModal.d.ts +17 -0
- package/dist/components/RenewSubscriptionModal/RenewSubscriptionModal.js +63 -0
- package/dist/components/RenewSubscriptionModal/RenewSubscriptionModal.js.map +1 -0
- package/dist/components/ResubscribeCard/ResubscribeCard.d.ts +9 -0
- package/dist/components/ResubscribeCard/ResubscribeCard.js +25 -0
- package/dist/components/ResubscribeCard/ResubscribeCard.js.map +1 -0
- package/dist/components/SubscriptionTabs/SubscriptionTabs.d.ts +8 -0
- package/dist/components/SubscriptionTabs/SubscriptionTabs.js +9 -0
- package/dist/components/SubscriptionTabs/SubscriptionTabs.js.map +1 -0
- package/dist/components/UpdatePaymentMethodModal/UpdatePaymentMethodModal.d.ts +9 -0
- package/dist/components/UpdatePaymentMethodModal/UpdatePaymentMethodModal.js +135 -0
- package/dist/components/UpdatePaymentMethodModal/UpdatePaymentMethodModal.js.map +1 -0
- package/dist/components/messages.d.ts +473 -0
- package/dist/components/messages.js +482 -0
- package/dist/components/messages.js.map +1 -0
- package/dist/constants.d.ts +14 -56
- package/dist/constants.js +23 -272
- package/dist/constants.js.map +1 -1
- package/dist/data/hooks/keys.d.ts +8 -13
- package/dist/data/hooks/keys.js +8 -13
- package/dist/data/hooks/keys.js.map +1 -1
- package/dist/data/hooks/useManageQueries.d.ts +37 -0
- package/dist/data/hooks/useManageQueries.js +206 -0
- package/dist/data/hooks/useManageQueries.js.map +1 -0
- package/dist/data/services/subs/urls.d.ts +2 -2
- package/dist/data/services/subs/urls.js.map +1 -1
- package/dist/data/services/subscription/cancelSubscription.d.ts +6 -0
- package/dist/data/services/subscription/cancelSubscription.js +31 -0
- package/dist/data/services/subscription/cancelSubscription.js.map +1 -0
- package/dist/data/services/subscription/getBillingPlans.d.ts +3 -0
- package/dist/{utils/fetchBillingPlans.js → data/services/subscription/getBillingPlans.js} +10 -21
- package/dist/data/services/subscription/getBillingPlans.js.map +1 -0
- package/dist/data/services/subscription/getIsCurrentUserSubscriber.d.ts +3 -0
- package/dist/data/services/subscription/getIsCurrentUserSubscriber.js +35 -0
- package/dist/data/services/subscription/getIsCurrentUserSubscriber.js.map +1 -0
- package/dist/data/services/subscription/getPaymentHistory.d.ts +6 -0
- package/dist/data/services/subscription/getPaymentHistory.js +65 -0
- package/dist/data/services/subscription/getPaymentHistory.js.map +1 -0
- package/dist/data/services/subscription/getSubscriptionEnrollments.d.ts +7 -0
- package/dist/data/services/subscription/getSubscriptionEnrollments.js +98 -0
- package/dist/data/services/subscription/getSubscriptionEnrollments.js.map +1 -0
- package/dist/data/services/subscription/getSubscriptionPaymentMethod.d.ts +8 -0
- package/dist/data/services/subscription/getSubscriptionPaymentMethod.js +42 -0
- package/dist/data/services/subscription/getSubscriptionPaymentMethod.js.map +1 -0
- package/dist/data/services/subscription/reactivateSubscription.d.ts +6 -0
- package/dist/data/services/subscription/reactivateSubscription.js +30 -0
- package/dist/data/services/subscription/reactivateSubscription.js.map +1 -0
- package/dist/data/services/subscription/updateSubscriptionPaymentMethod.d.ts +10 -0
- package/dist/data/services/subscription/updateSubscriptionPaymentMethod.js +31 -0
- package/dist/data/services/subscription/updateSubscriptionPaymentMethod.js.map +1 -0
- package/dist/icons/ExternalLinkIcon.d.ts +6 -0
- package/dist/icons/ExternalLinkIcon.js +18 -0
- package/dist/icons/ExternalLinkIcon.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/manageSubscriptionPage/CancelSubscriptionPage.d.ts +3 -0
- package/dist/manageSubscriptionPage/CancelSubscriptionPage.js +53 -0
- package/dist/manageSubscriptionPage/CancelSubscriptionPage.js.map +1 -0
- package/dist/manageSubscriptionPage/CancelSuccessPage.d.ts +3 -0
- package/dist/manageSubscriptionPage/CancelSuccessPage.js +24 -0
- package/dist/manageSubscriptionPage/CancelSuccessPage.js.map +1 -0
- package/dist/manageSubscriptionPage/ManageSubscriptionPage.d.ts +3 -0
- package/dist/manageSubscriptionPage/ManageSubscriptionPage.js +87 -0
- package/dist/manageSubscriptionPage/ManageSubscriptionPage.js.map +1 -0
- package/dist/messages.js +2 -2
- package/dist/messages.js.map +1 -1
- package/dist/routes.d.ts +9 -2
- package/dist/routes.js +26 -6
- package/dist/routes.js.map +1 -1
- package/dist/style.scss +1 -14
- package/dist/styles/components/manageSubscription.scss +454 -0
- package/dist/types.d.ts +57 -201
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/billingDetails.d.ts +3 -20
- package/dist/utils/billingDetails.js +4 -25
- package/dist/utils/billingDetails.js.map +1 -1
- package/dist/utils/edxSession.d.ts +18 -0
- package/dist/utils/edxSession.js +72 -0
- package/dist/utils/edxSession.js.map +1 -0
- package/dist/utils/formatDate.d.ts +16 -0
- package/dist/utils/formatDate.js +69 -0
- package/dist/utils/formatDate.js.map +1 -0
- package/dist/utils/graphqlClient.d.ts +9 -10
- package/dist/utils/graphqlClient.js +22 -11
- package/dist/utils/graphqlClient.js.map +1 -1
- package/dist/utils/invoiceAmount.d.ts +22 -0
- package/dist/utils/invoiceAmount.js +59 -0
- package/dist/utils/invoiceAmount.js.map +1 -0
- package/dist/utils/queries.d.ts +38 -33
- package/dist/utils/queries.js +83 -123
- package/dist/utils/queries.js.map +1 -1
- package/dist/utils/subscriptionView.d.ts +15 -0
- package/dist/utils/subscriptionView.js +50 -0
- package/dist/utils/subscriptionView.js.map +1 -0
- package/dist/utils/urls.d.ts +13 -0
- package/dist/utils/urls.js +52 -0
- package/dist/utils/urls.js.map +1 -0
- package/package.json +7 -2
- package/dist/checkoutPage/CheckoutPage.d.ts +0 -3
- package/dist/checkoutPage/CheckoutPage.js +0 -30
- package/dist/checkoutPage/CheckoutPage.js.map +0 -1
- package/dist/components/BrandMarks/BrandMarks.d.ts +0 -3
- package/dist/components/BrandMarks/BrandMarks.js +0 -9
- package/dist/components/BrandMarks/BrandMarks.js.map +0 -1
- package/dist/components/CartSummary/CartSummary.d.ts +0 -21
- package/dist/components/CartSummary/CartSummary.js +0 -30
- package/dist/components/CartSummary/CartSummary.js.map +0 -1
- package/dist/components/CartSummary/Messages.d.ts +0 -73
- package/dist/components/CartSummary/Messages.js +0 -76
- package/dist/components/CartSummary/Messages.js.map +0 -1
- package/dist/components/Checkout/Checkout.d.ts +0 -4
- package/dist/components/Checkout/Checkout.js +0 -40
- package/dist/components/Checkout/Checkout.js.map +0 -1
- package/dist/components/CheckoutGate/CheckoutGate.d.ts +0 -7
- package/dist/components/CheckoutGate/CheckoutGate.js +0 -35
- package/dist/components/CheckoutGate/CheckoutGate.js.map +0 -1
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.d.ts +0 -9
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.js +0 -31
- package/dist/components/CourseEnrollmentCard/CourseEnrollmentCard.js.map +0 -1
- package/dist/components/CourseEnrollmentCard/Messages.d.ts +0 -33
- package/dist/components/CourseEnrollmentCard/Messages.js +0 -35
- package/dist/components/CourseEnrollmentCard/Messages.js.map +0 -1
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.d.ts +0 -13
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.js +0 -11
- package/dist/components/EdxUnlimitedBanner/EdxUnlimitedBanner.js.map +0 -1
- package/dist/components/EnrollmentSummary/EnrollmentSummary.d.ts +0 -15
- package/dist/components/EnrollmentSummary/EnrollmentSummary.js +0 -21
- package/dist/components/EnrollmentSummary/EnrollmentSummary.js.map +0 -1
- package/dist/components/EnrollmentSummary/Messages.d.ts +0 -33
- package/dist/components/EnrollmentSummary/Messages.js +0 -35
- package/dist/components/EnrollmentSummary/Messages.js.map +0 -1
- package/dist/components/PaymentFields/PaymentFields.d.ts +0 -9
- package/dist/components/PaymentFields/PaymentFields.js +0 -7
- package/dist/components/PaymentFields/PaymentFields.js.map +0 -1
- package/dist/components/PaymentForm/Messages.d.ts +0 -88
- package/dist/components/PaymentForm/Messages.js +0 -95
- package/dist/components/PaymentForm/Messages.js.map +0 -1
- package/dist/components/PaymentForm/PaymentForm.d.ts +0 -21
- package/dist/components/PaymentForm/PaymentForm.js +0 -69
- package/dist/components/PaymentForm/PaymentForm.js.map +0 -1
- package/dist/components/StatusScreens/Messages.d.ts +0 -103
- package/dist/components/StatusScreens/Messages.js +0 -108
- package/dist/components/StatusScreens/Messages.js.map +0 -1
- package/dist/components/StatusScreens/StatusScreens.d.ts +0 -23
- package/dist/components/StatusScreens/StatusScreens.js +0 -25
- package/dist/components/StatusScreens/StatusScreens.js.map +0 -1
- package/dist/data/hooks/useCheckout.d.ts +0 -57
- package/dist/data/hooks/useCheckout.js +0 -249
- package/dist/data/hooks/useCheckout.js.map +0 -1
- package/dist/data/hooks/useCheckoutGate.d.ts +0 -15
- package/dist/data/hooks/useCheckoutGate.js +0 -39
- package/dist/data/hooks/useCheckoutGate.js.map +0 -1
- package/dist/data/hooks/useCheckoutMutations.d.ts +0 -16
- package/dist/data/hooks/useCheckoutMutations.js +0 -131
- package/dist/data/hooks/useCheckoutMutations.js.map +0 -1
- package/dist/data/hooks/useCheckoutQueries.d.ts +0 -30
- package/dist/data/hooks/useCheckoutQueries.js +0 -97
- package/dist/data/hooks/useCheckoutQueries.js.map +0 -1
- package/dist/styles/components/brandMarks.scss +0 -54
- package/dist/styles/components/cartSummary.scss +0 -18
- package/dist/styles/components/checkout.scss +0 -29
- package/dist/styles/components/checkoutStepper.scss +0 -9
- package/dist/styles/components/courseEnrollmentCard.scss +0 -38
- package/dist/styles/components/edxUnlimitedBanner.scss +0 -138
- package/dist/styles/components/enrollmentSummary.scss +0 -13
- package/dist/styles/components/paymentFields.scss +0 -15
- package/dist/styles/components/paymentForm.scss +0 -105
- package/dist/styles/components/statusScreens.scss +0 -29
- package/dist/styles/components/successScreen.scss +0 -0
- package/dist/utils/auth.d.ts +0 -7
- package/dist/utils/auth.js +0 -28
- package/dist/utils/auth.js.map +0 -1
- package/dist/utils/bootstrapApi.d.ts +0 -20
- package/dist/utils/bootstrapApi.js +0 -142
- package/dist/utils/bootstrapApi.js.map +0 -1
- package/dist/utils/cartApi.d.ts +0 -16
- package/dist/utils/cartApi.js +0 -118
- package/dist/utils/cartApi.js.map +0 -1
- package/dist/utils/checkout.d.ts +0 -6
- package/dist/utils/checkout.js +0 -28
- package/dist/utils/checkout.js.map +0 -1
- package/dist/utils/fetchActiveSubscriptions.d.ts +0 -4
- package/dist/utils/fetchActiveSubscriptions.js +0 -36
- package/dist/utils/fetchActiveSubscriptions.js.map +0 -1
- package/dist/utils/fetchBillingPlans.d.ts +0 -2
- package/dist/utils/fetchBillingPlans.js.map +0 -1
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.js +0 -17
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/provision.d.ts +0 -25
- package/dist/utils/provision.js +0 -95
- package/dist/utils/provision.js.map +0 -1
- package/dist/utils/stripe.d.ts +0 -7
- package/dist/utils/stripe.js +0 -43
- package/dist/utils/stripe.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentForm.js","sourceRoot":"","sources":["../../../src/components/PaymentForm/PaymentForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport type { Ref } from 'react';\nimport { Button, Form, Spinner } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport PaymentFields from '../PaymentFields/PaymentFields';\nimport type { BillingInfo, CheckoutConsent } from '../../types';\nimport type { PlanPrice } from '../../utils/billingDetails';\nimport { COUNTRIES_REQUIRING_EXTRA_CONFIRM, COUNTRIES } from '../../constants';\nimport messages from './Messages';\n\ntype PaymentMethod = 'card' | 'googlepay' | 'paypal';\n\nexport interface PaymentFormProps {\n billing: BillingInfo,\n setField: (field: keyof BillingInfo, value: string) => void,\n numberMountRef: Ref<HTMLDivElement>,\n expiryMountRef: Ref<HTMLDivElement>,\n cvcMountRef: Ref<HTMLDivElement>,\n cardError: string,\n stripeReady: boolean,\n sessionReady: boolean,\n submitting: boolean,\n onPlaceOrder: (consent: CheckoutConsent) => void,\n priceToShow: PlanPrice | null,\n cycleToShow: string,\n trialEnd?: string,\n userCountry?: string | null,\n}\n\nconst PaymentForm = ({\n billing,\n setField,\n numberMountRef,\n expiryMountRef,\n cvcMountRef,\n cardError,\n stripeReady,\n sessionReady,\n submitting,\n onPlaceOrder,\n priceToShow,\n cycleToShow,\n trialEnd,\n userCountry,\n}: PaymentFormProps) => {\n const { formatMessage } = useIntl();\n const [paymentMethod, setPaymentMethod] = useState<PaymentMethod>('card');\n const [confirmed, setConfirmed] = useState(false);\n const [ukCaConfirmed, setUkCaConfirmed] = useState(false);\n\n const showExtraConfirm\n = !!userCountry && COUNTRIES_REQUIRING_EXTRA_CONFIRM.includes(userCountry);\n\n const busy = submitting || !stripeReady || !sessionReady;\n\n let buttonLabel = formatMessage(messages.confirmSubscription);\n if (submitting) buttonLabel = formatMessage(messages.processing);\n else if (!sessionReady) buttonLabel = formatMessage(messages.loadingPayment);\n else if (!stripeReady) buttonLabel = formatMessage(messages.loadingPayment);\n\n const amount = priceToShow?.amount ?? '';\n const frequency = cycleToShow === 'annual' ? 'year' : 'month';\n\n const buildConsent = (): CheckoutConsent => {\n const termsText = formatMessage(messages.termsNotice, {\n renewalDate: trialEnd ?? '{date}',\n price: amount,\n frequency,\n termsLink: formatMessage(messages.termsOfUse),\n refundLink: formatMessage(messages.refundPolicy),\n });\n const recurringText = formatMessage(messages.recurringConfirm, {\n cycle: cycleToShow,\n price: amount,\n frequency,\n });\n const consentParts = [termsText, recurringText];\n if (showExtraConfirm) {\n consentParts.push(formatMessage(messages.ukCaResidentConfirm));\n }\n return {\n tConsentRecurring: confirmed,\n tConsentUkCa: showExtraConfirm ? ukCaConfirmed : null,\n tConsentAt: new Date().toISOString(),\n tConsentText: consentParts.join('\\n\\n'),\n };\n };\n\n return (\n <div className=\"payment-form bg-white\">\n <h2 className=\"payment-form__heading font-weight-bold mb-3 text-primary-500\">\n {formatMessage(messages.selectPaymentMethod)}\n </h2>\n\n <p className=\"payment-form__help small mb-4\">\n <strong className=\"d-block text-primary-500\">\n {formatMessage(messages.needAssistance)}\n </strong>{' '}\n <span className=\"text-gray-700\">\n {formatMessage(messages.needAssistanceBody, {\n link: (\n <a\n href=\"https://support.edx.org\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-gray-700\"\n >\n {formatMessage(messages.learnerHelpCenter)}\n </a>\n ),\n })}\n </span>\n </p>\n\n {/* ── Payment method accordion ── */}\n <div className=\"payment-form__methods mb-4\">\n {/* ── Card ── */}\n <div\n className={`payment-form__method${paymentMethod === 'card' ? ' payment-form__method--selected' : ''}`}\n >\n {/* Header row — always visible */}\n <label\n htmlFor=\"paymentMethod-card\"\n className=\"payment-form__method-header\"\n >\n <input\n id=\"paymentMethod-card\"\n type=\"radio\"\n name=\"paymentMethod\"\n value=\"card\"\n checked={paymentMethod === 'card'}\n onChange={() => setPaymentMethod('card')}\n className=\"payment-form__radio\"\n />\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 4C0 3.46957 0.210714 2.96086 0.585786 2.58579C0.960859 2.21071 1.46957 2 2 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4H0ZM0 6V12C0 12.5304 0.210714 13.0391 0.585786 13.4142C0.960859 13.7893 1.46957 14 2 14H14C14.5304 14 15.0391 13.7893 15.4142 13.4142C15.7893 13.0391 16 12.5304 16 12V6H0ZM3 11C3 10.7348 3.10536 10.4804 3.29289 10.2929C3.48043 10.1054 3.73478 10 4 10H5C5.26522 10 5.51957 10.1054 5.70711 10.2929C5.89464 10.4804 6 10.7348 6 11C6 11.2652 5.89464 11.5196 5.70711 11.7071C5.51957 11.8946 5.26522 12 5 12H4C3.73478 12 3.48043 11.8946 3.29289 11.7071C3.10536 11.5196 3 11.2652 3 11Z\"\n fill=\"#0270DE\"\n />\n </svg>\n <span className=\"payment-form__method-name text-info-500\">\n {formatMessage(messages.card)}\n </span>\n </label>\n\n {/* Expanded panel — only when selected */}\n {paymentMethod === 'card' && (\n <div className=\"payment-form__card-panel\">\n <PaymentFields\n numberMountRef={numberMountRef}\n expiryMountRef={expiryMountRef}\n cvcMountRef={cvcMountRef}\n cardError={cardError}\n />\n <Form.Group\n controlId=\"country\"\n className=\"mt-3 mb-0 payment__field--country\"\n >\n <Form.Label className=\"small m-0 x-small\">\n {formatMessage(messages.country)}\n </Form.Label>\n <Form.Control\n as=\"select\"\n value={billing.country}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) =>\n setField('country', e.target.value)}\n >\n {COUNTRIES.map((country) => {\n return (\n <option key={country[0]} value={country[0]}>\n {country[1]}\n </option>\n );\n })}\n </Form.Control>\n </Form.Group>\n </div>\n )}\n </div>\n\n {/* ── Google Pay ── */}\n <div\n className={`my-3 payment-form__method${paymentMethod === 'googlepay' ? ' payment-form__method--selected' : ''}`}\n >\n <label\n htmlFor=\"paymentMethod-googlepay\"\n className=\"payment-form__method-header\"\n >\n <input\n id=\"paymentMethod-googlepay\"\n type=\"radio\"\n name=\"paymentMethod\"\n value=\"googlepay\"\n checked={paymentMethod === 'googlepay'}\n onChange={() => setPaymentMethod('googlepay')}\n className=\"payment-form__radio\"\n />\n <span\n className=\"payment-form__method-icon payment-form__method-icon--gpay\"\n aria-hidden=\"true\"\n >\n G\n </span>\n <span className=\"payment-form__method-name\">\n {formatMessage(messages.googlePay)}\n </span>\n </label>\n </div>\n\n {/* ── PayPal ── */}\n <div\n className={`payment-form__method${paymentMethod === 'paypal' ? ' payment-form__method--selected' : ''}`}\n >\n <label\n htmlFor=\"paymentMethod-paypal\"\n className=\"payment-form__method-header\"\n >\n <input\n id=\"paymentMethod-paypal\"\n type=\"radio\"\n name=\"paymentMethod\"\n value=\"paypal\"\n checked={paymentMethod === 'paypal'}\n onChange={() => setPaymentMethod('paypal')}\n className=\"payment-form__radio\"\n />\n <span\n className=\"payment-form__method-icon payment-form__method-icon--paypal\"\n aria-hidden=\"true\"\n >\n P\n </span>\n <span className=\"payment-form__method-name\">\n {formatMessage(messages.paypal)}\n </span>\n </label>\n </div>\n </div>\n\n {/* ── Terms ── */}\n <p className=\"payment-form__terms text-gray-700 mb-3\">\n {formatMessage(messages.termsNotice, {\n renewalDate: trialEnd ?? '{date}',\n price: amount,\n frequency,\n termsLink: (\n <a\n className=\"text-gray-700\"\n href=\"/terms\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {formatMessage(messages.termsOfUse)}\n </a>\n ),\n refundLink: (\n <a\n className=\"text-gray-700\"\n href=\"/refund-policy\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {formatMessage(messages.refundPolicy)}\n </a>\n ),\n })}\n </p>\n\n {/* ── Checkboxes ── */}\n <Form.Group controlId=\"recurringConfirm\" className=\"mb-2\">\n <Form.Checkbox\n id=\"recurringConfirm\"\n checked={confirmed}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setConfirmed(e.target.checked)}\n >\n <span className=\"text-gray-700\">\n {formatMessage(messages.recurringConfirm, {\n cycle: cycleToShow,\n price: amount,\n frequency,\n })}\n </span>\n </Form.Checkbox>\n </Form.Group>\n\n {showExtraConfirm && (\n <Form.Group controlId=\"ukCaConfirm\" className=\"mb-4\">\n <Form.Checkbox\n id=\"ukCaConfirm\"\n checked={ukCaConfirmed}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setUkCaConfirmed(e.target.checked)}\n >\n <span className=\"text-gray-700\">\n {formatMessage(messages.ukCaResidentConfirm)}\n </span>\n </Form.Checkbox>\n </Form.Group>\n )}\n\n {/* ── Submit ── */}\n <Button\n variant=\"brand\"\n className=\"payment-form__submit\"\n onClick={() => onPlaceOrder(buildConsent())}\n disabled={\n !stripeReady\n || submitting\n || !confirmed\n || (showExtraConfirm && !ukCaConfirmed)\n }\n >\n {busy && (\n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"mr-2\"\n screenReaderText={formatMessage(messages.spinnerScreenReaderText)}\n />\n )}\n {buttonLabel}\n </Button>\n </div>\n );\n};\n\nexport default PaymentForm;\n"]}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
declare const messages: {
|
|
2
|
-
successHeadline: {
|
|
3
|
-
id: string;
|
|
4
|
-
defaultMessage: string;
|
|
5
|
-
description: string;
|
|
6
|
-
};
|
|
7
|
-
successSubheadline: {
|
|
8
|
-
id: string;
|
|
9
|
-
defaultMessage: string;
|
|
10
|
-
description: string;
|
|
11
|
-
};
|
|
12
|
-
successSubheadlineWithCourse: {
|
|
13
|
-
id: string;
|
|
14
|
-
defaultMessage: string;
|
|
15
|
-
description: string;
|
|
16
|
-
};
|
|
17
|
-
findACourse: {
|
|
18
|
-
id: string;
|
|
19
|
-
defaultMessage: string;
|
|
20
|
-
description: string;
|
|
21
|
-
};
|
|
22
|
-
startCourse: {
|
|
23
|
-
id: string;
|
|
24
|
-
defaultMessage: string;
|
|
25
|
-
description: string;
|
|
26
|
-
};
|
|
27
|
-
viewReceipt: {
|
|
28
|
-
id: string;
|
|
29
|
-
defaultMessage: string;
|
|
30
|
-
description: string;
|
|
31
|
-
};
|
|
32
|
-
whatsIncluded: {
|
|
33
|
-
id: string;
|
|
34
|
-
defaultMessage: string;
|
|
35
|
-
description: string;
|
|
36
|
-
};
|
|
37
|
-
benefit1: {
|
|
38
|
-
id: string;
|
|
39
|
-
defaultMessage: string;
|
|
40
|
-
description: string;
|
|
41
|
-
};
|
|
42
|
-
benefit1WithCourse: {
|
|
43
|
-
id: string;
|
|
44
|
-
defaultMessage: string;
|
|
45
|
-
description: string;
|
|
46
|
-
};
|
|
47
|
-
benefit2: {
|
|
48
|
-
id: string;
|
|
49
|
-
defaultMessage: string;
|
|
50
|
-
description: string;
|
|
51
|
-
};
|
|
52
|
-
benefit3: {
|
|
53
|
-
id: string;
|
|
54
|
-
defaultMessage: string;
|
|
55
|
-
description: string;
|
|
56
|
-
};
|
|
57
|
-
benefit4: {
|
|
58
|
-
id: string;
|
|
59
|
-
defaultMessage: string;
|
|
60
|
-
description: string;
|
|
61
|
-
};
|
|
62
|
-
orderNumber: {
|
|
63
|
-
id: string;
|
|
64
|
-
defaultMessage: string;
|
|
65
|
-
description: string;
|
|
66
|
-
};
|
|
67
|
-
purchaseDate: {
|
|
68
|
-
id: string;
|
|
69
|
-
defaultMessage: string;
|
|
70
|
-
description: string;
|
|
71
|
-
};
|
|
72
|
-
cancelNotice: {
|
|
73
|
-
id: string;
|
|
74
|
-
defaultMessage: string;
|
|
75
|
-
description: string;
|
|
76
|
-
};
|
|
77
|
-
blockedHeading: {
|
|
78
|
-
id: string;
|
|
79
|
-
defaultMessage: string;
|
|
80
|
-
description: string;
|
|
81
|
-
};
|
|
82
|
-
blockedDefault: {
|
|
83
|
-
id: string;
|
|
84
|
-
defaultMessage: string;
|
|
85
|
-
description: string;
|
|
86
|
-
};
|
|
87
|
-
paymentFailedHeading: {
|
|
88
|
-
id: string;
|
|
89
|
-
defaultMessage: string;
|
|
90
|
-
description: string;
|
|
91
|
-
};
|
|
92
|
-
paymentFailedDefault: {
|
|
93
|
-
id: string;
|
|
94
|
-
defaultMessage: string;
|
|
95
|
-
description: string;
|
|
96
|
-
};
|
|
97
|
-
tryAgain: {
|
|
98
|
-
id: string;
|
|
99
|
-
defaultMessage: string;
|
|
100
|
-
description: string;
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
export default messages;
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
-
const messages = defineMessages({
|
|
3
|
-
// SuccessScreen
|
|
4
|
-
successHeadline: {
|
|
5
|
-
id: 'checkout.successScreen.headline',
|
|
6
|
-
defaultMessage: "You're ready to begin learning.",
|
|
7
|
-
description: 'Main headline on the success screen',
|
|
8
|
-
},
|
|
9
|
-
successSubheadline: {
|
|
10
|
-
id: 'checkout.successScreen.subheadline',
|
|
11
|
-
defaultMessage: 'Your subscription is now active. Below is a summary of your order.',
|
|
12
|
-
description: 'Subheadline on the success screen',
|
|
13
|
-
},
|
|
14
|
-
successSubheadlineWithCourse: {
|
|
15
|
-
id: 'checkout.successScreen.subheadlineWithCourse',
|
|
16
|
-
defaultMessage: "Your subscription is now active (and you're enrolled in {courseLabel}). Below is a summary of your order.",
|
|
17
|
-
description: 'Subheadline on the success screen when the user enrolled in a specific course',
|
|
18
|
-
},
|
|
19
|
-
findACourse: {
|
|
20
|
-
id: 'checkout.successScreen.findACourse',
|
|
21
|
-
defaultMessage: "Let's find a course",
|
|
22
|
-
description: 'Primary CTA button on the success screen',
|
|
23
|
-
},
|
|
24
|
-
startCourse: {
|
|
25
|
-
id: 'checkout.successScreen.startCourse',
|
|
26
|
-
defaultMessage: 'Start course',
|
|
27
|
-
description: 'Primary CTA when the user enrolled in a specific course at checkout',
|
|
28
|
-
},
|
|
29
|
-
viewReceipt: {
|
|
30
|
-
id: 'checkout.successScreen.viewReceipt',
|
|
31
|
-
defaultMessage: 'View receipt',
|
|
32
|
-
description: 'View receipt link on the success screen',
|
|
33
|
-
},
|
|
34
|
-
whatsIncluded: {
|
|
35
|
-
id: 'checkout.successScreen.whatsIncluded',
|
|
36
|
-
defaultMessage: "What's included in your subscription",
|
|
37
|
-
description: 'Section heading for subscription benefits list',
|
|
38
|
-
},
|
|
39
|
-
benefit1: {
|
|
40
|
-
id: 'checkout.successScreen.benefit1',
|
|
41
|
-
defaultMessage: 'Access to graded assignments and exams in all courses you enroll in',
|
|
42
|
-
description: 'First subscription benefit',
|
|
43
|
-
},
|
|
44
|
-
benefit1WithCourse: {
|
|
45
|
-
id: 'checkout.successScreen.benefit1WithCourse',
|
|
46
|
-
defaultMessage: 'Access to graded assignments and exams in {courseLabel} and all courses you enroll in',
|
|
47
|
-
description: 'First subscription benefit when a specific course was enrolled at checkout',
|
|
48
|
-
},
|
|
49
|
-
benefit2: {
|
|
50
|
-
id: 'checkout.successScreen.benefit2',
|
|
51
|
-
defaultMessage: 'Shareable certificate upon completion',
|
|
52
|
-
description: 'Second subscription benefit',
|
|
53
|
-
},
|
|
54
|
-
benefit3: {
|
|
55
|
-
id: 'checkout.successScreen.benefit3',
|
|
56
|
-
defaultMessage: '24/7 global support',
|
|
57
|
-
description: 'Third subscription benefit',
|
|
58
|
-
},
|
|
59
|
-
benefit4: {
|
|
60
|
-
id: 'checkout.successScreen.benefit4',
|
|
61
|
-
defaultMessage: 'Early access to edX learning features',
|
|
62
|
-
description: 'Fourth subscription benefit',
|
|
63
|
-
},
|
|
64
|
-
orderNumber: {
|
|
65
|
-
id: 'checkout.successScreen.orderNumber',
|
|
66
|
-
defaultMessage: 'Order number',
|
|
67
|
-
description: 'Order number label',
|
|
68
|
-
},
|
|
69
|
-
purchaseDate: {
|
|
70
|
-
id: 'checkout.successScreen.purchaseDate',
|
|
71
|
-
defaultMessage: 'Purchase date',
|
|
72
|
-
description: 'Purchase date label',
|
|
73
|
-
},
|
|
74
|
-
cancelNotice: {
|
|
75
|
-
id: 'checkout.successScreen.cancelNotice',
|
|
76
|
-
defaultMessage: 'To avoid being charged, cancel your subscription by {trialEnd} from your dashboard.',
|
|
77
|
-
description: 'Trial cancellation reminder at the bottom of the success screen',
|
|
78
|
-
},
|
|
79
|
-
// BlockedScreen
|
|
80
|
-
blockedHeading: {
|
|
81
|
-
id: 'checkout.blockedScreen.heading',
|
|
82
|
-
defaultMessage: 'Order blocked',
|
|
83
|
-
description: 'Heading shown when order is blocked',
|
|
84
|
-
},
|
|
85
|
-
blockedDefault: {
|
|
86
|
-
id: 'checkout.blockedScreen.defaultMessage',
|
|
87
|
-
defaultMessage: 'We were unable to complete this order. Please contact support if you believe this is an error.',
|
|
88
|
-
description: 'Default blocked message when no detail is provided',
|
|
89
|
-
},
|
|
90
|
-
// PaymentFailedScreen
|
|
91
|
-
paymentFailedHeading: {
|
|
92
|
-
id: 'checkout.paymentFailedScreen.heading',
|
|
93
|
-
defaultMessage: 'Payment failed',
|
|
94
|
-
description: 'Heading shown when payment fails',
|
|
95
|
-
},
|
|
96
|
-
paymentFailedDefault: {
|
|
97
|
-
id: 'checkout.paymentFailedScreen.defaultMessage',
|
|
98
|
-
defaultMessage: 'Your card could not be processed. Please check your card details and try again.',
|
|
99
|
-
description: 'Default payment failed message',
|
|
100
|
-
},
|
|
101
|
-
tryAgain: {
|
|
102
|
-
id: 'checkout.paymentFailedScreen.tryAgain',
|
|
103
|
-
defaultMessage: 'Try again',
|
|
104
|
-
description: 'Try again button label',
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
export default messages;
|
|
108
|
-
//# sourceMappingURL=Messages.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../../src/components/StatusScreens/Messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,gBAAgB;IAChB,eAAe,EAAE;QACf,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,iCAAiC;QACjD,WAAW,EAAE,qCAAqC;KACnD;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,oEAAoE;QACpF,WAAW,EAAE,mCAAmC;KACjD;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,8CAA8C;QAClD,cAAc,EAAE,2GAA2G;QAC3H,WAAW,EAAE,+EAA+E;KAC7F;IACD,WAAW,EAAE;QACX,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,0CAA0C;KACxD;IACD,WAAW,EAAE;QACX,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,qEAAqE;KACnF;IACD,WAAW,EAAE;QACX,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,yCAAyC;KACvD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,sCAAsC;QACtD,WAAW,EAAE,gDAAgD;KAC9D;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,qEAAqE;QACrF,WAAW,EAAE,4BAA4B;KAC1C;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,2CAA2C;QAC/C,cAAc,EAAE,uFAAuF;QACvG,WAAW,EAAE,4EAA4E;KAC1F;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,uCAAuC;QACvD,WAAW,EAAE,6BAA6B;KAC3C;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,4BAA4B;KAC1C;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,iCAAiC;QACrC,cAAc,EAAE,uCAAuC;QACvD,WAAW,EAAE,6BAA6B;KAC3C;IACD,WAAW,EAAE;QACX,EAAE,EAAE,oCAAoC;QACxC,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,oBAAoB;KAClC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,qBAAqB;KACnC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,qFAAqF;QACrG,WAAW,EAAE,iEAAiE;KAC/E;IAED,gBAAgB;IAChB,cAAc,EAAE;QACd,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,qCAAqC;KACnD;IACD,cAAc,EAAE;QACd,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,gGAAgG;QAChH,WAAW,EAAE,oDAAoD;KAClE;IAED,sBAAsB;IACtB,oBAAoB,EAAE;QACpB,EAAE,EAAE,sCAAsC;QAC1C,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,kCAAkC;KAChD;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,6CAA6C;QACjD,cAAc,EAAE,iFAAiF;QACjG,WAAW,EAAE,gCAAgC;KAC9C;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,uCAAuC;QAC3C,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,wBAAwB;KACtC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n // SuccessScreen\n successHeadline: {\n id: 'checkout.successScreen.headline',\n defaultMessage: \"You're ready to begin learning.\",\n description: 'Main headline on the success screen',\n },\n successSubheadline: {\n id: 'checkout.successScreen.subheadline',\n defaultMessage: 'Your subscription is now active. Below is a summary of your order.',\n description: 'Subheadline on the success screen',\n },\n successSubheadlineWithCourse: {\n id: 'checkout.successScreen.subheadlineWithCourse',\n defaultMessage: \"Your subscription is now active (and you're enrolled in {courseLabel}). Below is a summary of your order.\",\n description: 'Subheadline on the success screen when the user enrolled in a specific course',\n },\n findACourse: {\n id: 'checkout.successScreen.findACourse',\n defaultMessage: \"Let's find a course\",\n description: 'Primary CTA button on the success screen',\n },\n startCourse: {\n id: 'checkout.successScreen.startCourse',\n defaultMessage: 'Start course',\n description: 'Primary CTA when the user enrolled in a specific course at checkout',\n },\n viewReceipt: {\n id: 'checkout.successScreen.viewReceipt',\n defaultMessage: 'View receipt',\n description: 'View receipt link on the success screen',\n },\n whatsIncluded: {\n id: 'checkout.successScreen.whatsIncluded',\n defaultMessage: \"What's included in your subscription\",\n description: 'Section heading for subscription benefits list',\n },\n benefit1: {\n id: 'checkout.successScreen.benefit1',\n defaultMessage: 'Access to graded assignments and exams in all courses you enroll in',\n description: 'First subscription benefit',\n },\n benefit1WithCourse: {\n id: 'checkout.successScreen.benefit1WithCourse',\n defaultMessage: 'Access to graded assignments and exams in {courseLabel} and all courses you enroll in',\n description: 'First subscription benefit when a specific course was enrolled at checkout',\n },\n benefit2: {\n id: 'checkout.successScreen.benefit2',\n defaultMessage: 'Shareable certificate upon completion',\n description: 'Second subscription benefit',\n },\n benefit3: {\n id: 'checkout.successScreen.benefit3',\n defaultMessage: '24/7 global support',\n description: 'Third subscription benefit',\n },\n benefit4: {\n id: 'checkout.successScreen.benefit4',\n defaultMessage: 'Early access to edX learning features',\n description: 'Fourth subscription benefit',\n },\n orderNumber: {\n id: 'checkout.successScreen.orderNumber',\n defaultMessage: 'Order number',\n description: 'Order number label',\n },\n purchaseDate: {\n id: 'checkout.successScreen.purchaseDate',\n defaultMessage: 'Purchase date',\n description: 'Purchase date label',\n },\n cancelNotice: {\n id: 'checkout.successScreen.cancelNotice',\n defaultMessage: 'To avoid being charged, cancel your subscription by {trialEnd} from your dashboard.',\n description: 'Trial cancellation reminder at the bottom of the success screen',\n },\n\n // BlockedScreen\n blockedHeading: {\n id: 'checkout.blockedScreen.heading',\n defaultMessage: 'Order blocked',\n description: 'Heading shown when order is blocked',\n },\n blockedDefault: {\n id: 'checkout.blockedScreen.defaultMessage',\n defaultMessage: 'We were unable to complete this order. Please contact support if you believe this is an error.',\n description: 'Default blocked message when no detail is provided',\n },\n\n // PaymentFailedScreen\n paymentFailedHeading: {\n id: 'checkout.paymentFailedScreen.heading',\n defaultMessage: 'Payment failed',\n description: 'Heading shown when payment fails',\n },\n paymentFailedDefault: {\n id: 'checkout.paymentFailedScreen.defaultMessage',\n defaultMessage: 'Your card could not be processed. Please check your card details and try again.',\n description: 'Default payment failed message',\n },\n tryAgain: {\n id: 'checkout.paymentFailedScreen.tryAgain',\n defaultMessage: 'Try again',\n description: 'Try again button label',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface SuccessScreenProps {
|
|
2
|
-
subscriptionBiId?: string;
|
|
3
|
-
orderNumber?: string;
|
|
4
|
-
purchaseDate?: string;
|
|
5
|
-
trialStart?: string;
|
|
6
|
-
trialEnd?: string;
|
|
7
|
-
onFindCourse?: () => void;
|
|
8
|
-
cardLast4?: string;
|
|
9
|
-
priceToShow?: string;
|
|
10
|
-
cycleToShow?: string;
|
|
11
|
-
/** e.g. "StanfordOnline: Algorithms: Design and Analysis" — enables course-aware copy. */
|
|
12
|
-
courseLabel?: string | null;
|
|
13
|
-
}
|
|
14
|
-
export declare const SuccessScreen: ({ subscriptionBiId, orderNumber, purchaseDate, trialEnd, onFindCourse, courseLabel, }: SuccessScreenProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
-
export interface BlockedScreenProps {
|
|
16
|
-
detail?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare const BlockedScreen: ({ detail }: BlockedScreenProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
-
export interface PaymentFailedScreenProps {
|
|
20
|
-
detail?: string;
|
|
21
|
-
onBack: () => void;
|
|
22
|
-
}
|
|
23
|
-
export declare const PaymentFailedScreen: ({ detail, onBack, }: PaymentFailedScreenProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button, Icon } from '@openedx/paragon';
|
|
3
|
-
import { Error as ErrorIcon, Block } from '@openedx/paragon/icons';
|
|
4
|
-
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
-
import messages from './Messages';
|
|
6
|
-
export const SuccessScreen = ({ subscriptionBiId, orderNumber, purchaseDate, trialEnd, onFindCourse, courseLabel = null, }) => {
|
|
7
|
-
var _a;
|
|
8
|
-
const { formatMessage } = useIntl();
|
|
9
|
-
const displayOrderNumber = (_a = orderNumber !== null && orderNumber !== void 0 ? orderNumber : subscriptionBiId) !== null && _a !== void 0 ? _a : '—';
|
|
10
|
-
const hasCourse = !!courseLabel;
|
|
11
|
-
return (_jsxs("div", { className: "success-screen", children: [_jsx("h1", { className: "success-screen__headline font-weight-bold mb-2", children: formatMessage(messages.successHeadline) }), _jsx("p", { className: "text-muted mb-4", children: hasCourse
|
|
12
|
-
? formatMessage(messages.successSubheadlineWithCourse, { courseLabel })
|
|
13
|
-
: formatMessage(messages.successSubheadline) }), _jsx("div", { className: "success-screen__ctas d-flex align-items-center mb-5", children: _jsx(Button, { variant: "brand", className: "success-screen__cta-primary mr-3", onClick: onFindCourse, children: formatMessage(hasCourse ? messages.startCourse : messages.findACourse) }) }), _jsxs("div", { className: "row", children: [_jsxs("div", { className: "col-12 col-md-7 mb-4", children: [_jsx("h2", { className: "h5 font-weight-bold mb-3", children: formatMessage(messages.whatsIncluded) }), _jsxs("ul", { className: "success-screen__benefits pl-4", children: [_jsx("li", { className: "mb-2", children: hasCourse
|
|
14
|
-
? formatMessage(messages.benefit1WithCourse, { courseLabel })
|
|
15
|
-
: formatMessage(messages.benefit1) }), _jsx("li", { className: "mb-2", children: formatMessage(messages.benefit2) }), _jsx("li", { className: "mb-2", children: formatMessage(messages.benefit3) }), _jsx("li", { className: "mb-2", children: formatMessage(messages.benefit4) })] })] }), _jsxs("div", { className: "col-12 col-md-5 mb-4", children: [displayOrderNumber && (_jsxs("div", { className: "mb-3", children: [_jsx("p", { className: "font-weight-bold mb-0", children: formatMessage(messages.orderNumber) }), _jsx("p", { className: "text-muted mb-0", children: displayOrderNumber })] })), purchaseDate && (_jsxs("div", { children: [_jsx("p", { className: "font-weight-bold mb-0", children: formatMessage(messages.purchaseDate) }), _jsx("p", { className: "text-muted mb-0", children: purchaseDate })] }))] })] }), _jsx("hr", {}), trialEnd && (_jsx("p", { className: "text-muted small mt-3", children: formatMessage(messages.cancelNotice, { trialEnd }) }))] }));
|
|
16
|
-
};
|
|
17
|
-
export const BlockedScreen = ({ detail }) => {
|
|
18
|
-
const { formatMessage } = useIntl();
|
|
19
|
-
return (_jsxs("div", { className: "blocked-screen text-center py-5", children: [_jsx(Icon, { src: Block, className: "blocked-screen__icon text-danger mb-3" }), _jsx("h3", { className: "font-weight-bold", children: formatMessage(messages.blockedHeading) }), _jsx("p", { className: "text-muted", children: detail || formatMessage(messages.blockedDefault) })] }));
|
|
20
|
-
};
|
|
21
|
-
export const PaymentFailedScreen = ({ detail, onBack, }) => {
|
|
22
|
-
const { formatMessage } = useIntl();
|
|
23
|
-
return (_jsxs("div", { className: "payment-failed-screen text-center py-4", children: [_jsx(Icon, { src: ErrorIcon, className: "payment-failed-screen__icon text-danger mb-3" }), _jsx("h3", { className: "font-weight-bold mb-2", children: formatMessage(messages.paymentFailedHeading) }), _jsx("p", { className: "payment-failed-screen__detail text-muted mb-4", children: detail || formatMessage(messages.paymentFailedDefault) }), _jsx(Button, { variant: "brand", className: "w-100", onClick: onBack, children: formatMessage(messages.tryAgain) })] }));
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=StatusScreens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatusScreens.js","sourceRoot":"","sources":["../../../src/components/StatusScreens/StatusScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Button, Icon } from '@openedx/paragon';\nimport { Error as ErrorIcon, Block } from '@openedx/paragon/icons';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './Messages';\n\n// ---------------------------------------------------------------------------\n// SuccessScreen\n// ---------------------------------------------------------------------------\n\nexport interface SuccessScreenProps {\n subscriptionBiId?: string,\n orderNumber?: string,\n purchaseDate?: string,\n trialStart?: string,\n trialEnd?: string,\n onFindCourse?: () => void,\n cardLast4?: string,\n priceToShow?: string,\n cycleToShow?: string,\n /** e.g. \"StanfordOnline: Algorithms: Design and Analysis\" — enables course-aware copy. */\n courseLabel?: string | null,\n}\n\nexport const SuccessScreen = ({\n subscriptionBiId,\n orderNumber,\n purchaseDate,\n trialEnd,\n onFindCourse,\n courseLabel = null,\n}: SuccessScreenProps) => {\n const { formatMessage } = useIntl();\n\n const displayOrderNumber = orderNumber ?? subscriptionBiId ?? '—';\n const hasCourse = !!courseLabel;\n\n return (\n <div className=\"success-screen\">\n <h1 className=\"success-screen__headline font-weight-bold mb-2\">\n {formatMessage(messages.successHeadline)}\n </h1>\n\n <p className=\"text-muted mb-4\">\n {hasCourse\n ? formatMessage(messages.successSubheadlineWithCourse, { courseLabel })\n : formatMessage(messages.successSubheadline)}\n </p>\n\n {/* ── CTAs ── */}\n <div className=\"success-screen__ctas d-flex align-items-center mb-5\">\n <Button\n variant=\"brand\"\n className=\"success-screen__cta-primary mr-3\"\n onClick={onFindCourse}\n >\n {formatMessage(hasCourse ? messages.startCourse : messages.findACourse)}\n </Button>\n {/* View receipt button hidden temporarily */}\n </div>\n\n {/* ── Two column: benefits + order details ── */}\n <div className=\"row\">\n <div className=\"col-12 col-md-7 mb-4\">\n <h2 className=\"h5 font-weight-bold mb-3\">\n {formatMessage(messages.whatsIncluded)}\n </h2>\n <ul className=\"success-screen__benefits pl-4\">\n <li className=\"mb-2\">\n {hasCourse\n ? formatMessage(messages.benefit1WithCourse, { courseLabel })\n : formatMessage(messages.benefit1)}\n </li>\n <li className=\"mb-2\">{formatMessage(messages.benefit2)}</li>\n <li className=\"mb-2\">{formatMessage(messages.benefit3)}</li>\n <li className=\"mb-2\">{formatMessage(messages.benefit4)}</li>\n </ul>\n </div>\n\n <div className=\"col-12 col-md-5 mb-4\">\n {displayOrderNumber && (\n <div className=\"mb-3\">\n <p className=\"font-weight-bold mb-0\">\n {formatMessage(messages.orderNumber)}\n </p>\n <p className=\"text-muted mb-0\">{displayOrderNumber}</p>\n </div>\n )}\n {purchaseDate && (\n <div>\n <p className=\"font-weight-bold mb-0\">\n {formatMessage(messages.purchaseDate)}\n </p>\n <p className=\"text-muted mb-0\">{purchaseDate}</p>\n </div>\n )}\n </div>\n </div>\n\n <hr />\n\n {/* ── Trial cancellation notice ── */}\n {trialEnd && (\n <p className=\"text-muted small mt-3\">\n {formatMessage(messages.cancelNotice, { trialEnd })}\n </p>\n )}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// BlockedScreen\n// ---------------------------------------------------------------------------\n\nexport interface BlockedScreenProps {\n detail?: string,\n}\n\nexport const BlockedScreen = ({ detail }: BlockedScreenProps) => {\n const { formatMessage } = useIntl();\n return (\n <div className=\"blocked-screen text-center py-5\">\n <Icon src={Block} className=\"blocked-screen__icon text-danger mb-3\" />\n <h3 className=\"font-weight-bold\">\n {formatMessage(messages.blockedHeading)}\n </h3>\n <p className=\"text-muted\">\n {detail || formatMessage(messages.blockedDefault)}\n </p>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// PaymentFailedScreen\n// ---------------------------------------------------------------------------\n\nexport interface PaymentFailedScreenProps {\n detail?: string,\n onBack: () => void,\n}\n\nexport const PaymentFailedScreen = ({\n detail,\n onBack,\n}: PaymentFailedScreenProps) => {\n const { formatMessage } = useIntl();\n return (\n <div className=\"payment-failed-screen text-center py-4\">\n <Icon\n src={ErrorIcon}\n className=\"payment-failed-screen__icon text-danger mb-3\"\n />\n <h3 className=\"font-weight-bold mb-2\">\n {formatMessage(messages.paymentFailedHeading)}\n </h3>\n <p className=\"payment-failed-screen__detail text-muted mb-4\">\n {detail || formatMessage(messages.paymentFailedDefault)}\n </p>\n <Button variant=\"brand\" className=\"w-100\" onClick={onBack}>\n {formatMessage(messages.tryAgain)}\n </Button>\n </div>\n );\n};\n"]}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { Ref } from 'react';
|
|
2
|
-
import type { BillingCycle } from '../../types';
|
|
3
|
-
import type { Status, Phase, BillingInfo, BillingPlan, CheckoutConsent } from '../../types';
|
|
4
|
-
export interface UseCheckoutOptions {
|
|
5
|
-
apiUrl?: string;
|
|
6
|
-
edxSessionUrl?: string;
|
|
7
|
-
stripePublishableKey?: string;
|
|
8
|
-
onComplete?: (subscriptionBiId: string | null) => void;
|
|
9
|
-
/** Country code resolved by CheckoutGate — used to show/hide the UK/CA extra checkbox. */
|
|
10
|
-
userCountry?: string | null;
|
|
11
|
-
/**
|
|
12
|
-
* Course run key from the URL (e.g. course-v1:HarvardX+CS50+X).
|
|
13
|
-
* When omitted, read from ?course_run_key=.
|
|
14
|
-
*/
|
|
15
|
-
courseRunKey?: string | null;
|
|
16
|
-
}
|
|
17
|
-
export interface UseCheckoutResult {
|
|
18
|
-
phase: Phase;
|
|
19
|
-
status: Status | null;
|
|
20
|
-
statusLabel: string;
|
|
21
|
-
stripeReady: boolean;
|
|
22
|
-
/** True once the Stripe card Element iframe is fully initialised and interactive. */
|
|
23
|
-
cardReady: boolean;
|
|
24
|
-
notConfigured: boolean;
|
|
25
|
-
showBanner: boolean;
|
|
26
|
-
dismissBanner: () => void;
|
|
27
|
-
error: string;
|
|
28
|
-
clearError: () => void;
|
|
29
|
-
cardError: string;
|
|
30
|
-
lastComment: string;
|
|
31
|
-
/** Full subscription details including card last 4 — available after SUBSCRIPTION_CREATED. */
|
|
32
|
-
subscriptionDetails: import('../../types').SubscriptionDetails | null;
|
|
33
|
-
billing: BillingInfo;
|
|
34
|
-
setField: (field: keyof BillingInfo, value: string) => void;
|
|
35
|
-
numberMountRef: Ref<HTMLDivElement>;
|
|
36
|
-
expiryMountRef: Ref<HTMLDivElement>;
|
|
37
|
-
cvcMountRef: Ref<HTMLDivElement>;
|
|
38
|
-
submitting: boolean;
|
|
39
|
-
/** True from Place order click until a terminal status is reached. */
|
|
40
|
-
processingSubscription: boolean;
|
|
41
|
-
placeOrder: (consent: CheckoutConsent) => void;
|
|
42
|
-
/** Billing plans fetched on mount — includes prices for display in CartSummary. */
|
|
43
|
-
billingPlans: BillingPlan[];
|
|
44
|
-
/** Live active subscriber count for display in CartSummary. */
|
|
45
|
-
activeSubscriberCount: number | null;
|
|
46
|
-
/** Currently selected billing cycle. */
|
|
47
|
-
selectedCycle: BillingCycle;
|
|
48
|
-
/** Switch between monthly and annual billing. */
|
|
49
|
-
setCycle: (cycle: BillingCycle) => void;
|
|
50
|
-
/** True once GET /edx-session has returned and the viax token is set. */
|
|
51
|
-
sessionReady: boolean;
|
|
52
|
-
/** ISO 3166-1 alpha-2 country code — passed in from CheckoutGate for the UK/CA checkbox. */
|
|
53
|
-
userCountry: string | null;
|
|
54
|
-
/** Course details when arrived via ?course_run_key=; null for standard checkout. */
|
|
55
|
-
course: import('../../types').CourseDetail | null;
|
|
56
|
-
}
|
|
57
|
-
export default function useCheckout(options?: UseCheckoutOptions): UseCheckoutResult;
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
11
|
-
import { createCheckoutClient } from '../../utils/checkout';
|
|
12
|
-
import { loadStripe } from '../../utils/stripe';
|
|
13
|
-
import { STATUS, STATUS_LABELS, STRIPE_ELEMENT_OPTS, phaseFor, DEFAULTS, } from '../../constants';
|
|
14
|
-
import { useCartStatusQuery, useSubscriptionIdQuery, useBillingPlansQuery, useActiveSubscriptionsQuery, useViaxSessionQuery, useCourseDetailQuery, } from './useCheckoutQueries';
|
|
15
|
-
import { useCheckoutMutations } from './useCheckoutMutations';
|
|
16
|
-
/**
|
|
17
|
-
* Read ?course_run_key= from the current URL.
|
|
18
|
-
* Avoid URLSearchParams — it treats bare `+` as a space, which would turn
|
|
19
|
-
* HarvardX+CS50+X into "HarvardX CS50 X". decodeURIComponent keeps `+` intact.
|
|
20
|
-
*/
|
|
21
|
-
function getCourseRunKeyFromUrl() {
|
|
22
|
-
if (typeof window === 'undefined')
|
|
23
|
-
return null;
|
|
24
|
-
const match = /[?&]course_run_key=([^&]*)/.exec(window.location.search);
|
|
25
|
-
if (!match)
|
|
26
|
-
return null;
|
|
27
|
-
try {
|
|
28
|
-
// Preserve literal `+` (treat as %2B) then decode %XX sequences.
|
|
29
|
-
return decodeURIComponent(match[1].replace(/\+/g, '%2B')).trim() || null;
|
|
30
|
-
}
|
|
31
|
-
catch (_a) {
|
|
32
|
-
return match[1].trim() || null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
export default function useCheckout(options = {}) {
|
|
36
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
37
|
-
const { apiUrl = DEFAULTS.apiUrl, edxSessionUrl, stripePublishableKey, onComplete, userCountry = null, courseRunKey: courseRunKeyProp, } = options;
|
|
38
|
-
const courseRunKey = useMemo(() => courseRunKeyProp !== null && courseRunKeyProp !== void 0 ? courseRunKeyProp : getCourseRunKeyFromUrl(), [courseRunKeyProp]);
|
|
39
|
-
const client = useMemo(() => {
|
|
40
|
-
if (!apiUrl)
|
|
41
|
-
return null;
|
|
42
|
-
return createCheckoutClient({ apiUrl });
|
|
43
|
-
}, [apiUrl]);
|
|
44
|
-
const notConfigured = !client || !stripePublishableKey || !edxSessionUrl;
|
|
45
|
-
// Exchange edX session for viax token on page load.
|
|
46
|
-
const sessionQuery = useViaxSessionQuery(notConfigured ? null : edxSessionUrl);
|
|
47
|
-
const sessionReady = !!sessionQuery.data;
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (sessionQuery.data && client) {
|
|
50
|
-
client.setToken(sessionQuery.data.viaxToken);
|
|
51
|
-
}
|
|
52
|
-
}, [sessionQuery.data, client]);
|
|
53
|
-
// Fetch billing plans, subscriber count, and optional course once the viax session is ready.
|
|
54
|
-
const billingPlansQuery = useBillingPlansQuery(client, sessionReady);
|
|
55
|
-
const activeSubscriptionsQuery = useActiveSubscriptionsQuery(client, sessionReady);
|
|
56
|
-
const courseDetailQuery = useCourseDetailQuery(client, sessionReady, courseRunKey);
|
|
57
|
-
// --- state ---
|
|
58
|
-
const [showBanner, setShowBanner] = useState(true);
|
|
59
|
-
const [cart, setCart] = useState(null);
|
|
60
|
-
const [stripe, setStripe] = useState(null);
|
|
61
|
-
const [stripeReady, setStripeReady] = useState(false);
|
|
62
|
-
const [cardReady, setCardReady] = useState(false);
|
|
63
|
-
const [error, setError] = useState('');
|
|
64
|
-
const [cardError, setCardError] = useState('');
|
|
65
|
-
const [billing, setBilling] = useState({
|
|
66
|
-
firstName: '', lastName: '', city: '', zip: '', country: 'US', line1: '', state: '',
|
|
67
|
-
});
|
|
68
|
-
const [selectedCycle, setSelectedCycle] = useState('monthly');
|
|
69
|
-
const [processingSubscription, setProcessingSubscription] = useState(false);
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
if (sessionQuery.error) {
|
|
72
|
-
setError(sessionQuery.error.message);
|
|
73
|
-
}
|
|
74
|
-
}, [sessionQuery.error]);
|
|
75
|
-
const setField = useCallback((field, value) => setBilling((p) => (Object.assign(Object.assign({}, p), { [field]: value }))), []);
|
|
76
|
-
// --- refs ---
|
|
77
|
-
// Stripe instances — written inside useEffect and mutations.
|
|
78
|
-
const stripeInstanceRef = useRef(null);
|
|
79
|
-
const cardNumberElementRef = useRef(null);
|
|
80
|
-
const elementsRef = useRef(null);
|
|
81
|
-
const elementsMountedRef = useRef(false);
|
|
82
|
-
// DOM mount targets — passed as ref={} to the Stripe Element host divs.
|
|
83
|
-
const numberMountRef = useRef(null);
|
|
84
|
-
const expiryMountRef = useRef(null);
|
|
85
|
-
const cvcMountRef = useRef(null);
|
|
86
|
-
const mountedRef = useRef(true);
|
|
87
|
-
const completedRef = useRef(false);
|
|
88
|
-
const sessionRef = useRef(null);
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
var _a;
|
|
91
|
-
sessionRef.current = (_a = sessionQuery.data) !== null && _a !== void 0 ? _a : null;
|
|
92
|
-
}, [sessionQuery.data]);
|
|
93
|
-
// Mirror state into refs so mutations can read current values without stale closures.
|
|
94
|
-
const cartRef = useRef(null);
|
|
95
|
-
const billingRef = useRef(billing);
|
|
96
|
-
useEffect(() => {
|
|
97
|
-
cartRef.current = cart;
|
|
98
|
-
}, [cart]);
|
|
99
|
-
useEffect(() => {
|
|
100
|
-
billingRef.current = billing;
|
|
101
|
-
}, [billing]);
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
stripeInstanceRef.current = stripe;
|
|
104
|
-
}, [stripe]);
|
|
105
|
-
// --- server state ---
|
|
106
|
-
const statusQuery = useCartStatusQuery(client, (_a = cart === null || cart === void 0 ? void 0 : cart.biId) !== null && _a !== void 0 ? _a : null);
|
|
107
|
-
const status = (_c = (_b = statusQuery.data) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : null;
|
|
108
|
-
const lastComment = (_e = (_d = statusQuery.data) === null || _d === void 0 ? void 0 : _d.lastComment) !== null && _e !== void 0 ? _e : '';
|
|
109
|
-
// Phase is 'ready' until a cart exists, then driven by bpStatus.
|
|
110
|
-
const phase = cart ? phaseFor(status, status === STATUS.IN_CART) : 'ready';
|
|
111
|
-
const subscriptionIdQuery = useSubscriptionIdQuery(client, (_f = cart === null || cart === void 0 ? void 0 : cart.biId) !== null && _f !== void 0 ? _f : null, status === STATUS.SUBSCRIPTION_CREATED);
|
|
112
|
-
// --- mutations ---
|
|
113
|
-
const { placeOrder: placeMutation } = useCheckoutMutations({
|
|
114
|
-
client,
|
|
115
|
-
sessionRef,
|
|
116
|
-
stripeRef: stripeInstanceRef,
|
|
117
|
-
cardNumberElRef: cardNumberElementRef,
|
|
118
|
-
billingRef,
|
|
119
|
-
setError: (msg) => {
|
|
120
|
-
setProcessingSubscription(false);
|
|
121
|
-
setError(msg);
|
|
122
|
-
},
|
|
123
|
-
setCardError: (msg) => {
|
|
124
|
-
setProcessingSubscription(false);
|
|
125
|
-
setCardError(msg);
|
|
126
|
-
},
|
|
127
|
-
onCartCreated: (created) => {
|
|
128
|
-
// Sync the ref immediately so any same-tick readers see the cart
|
|
129
|
-
// before the setCart → useEffect mirror runs.
|
|
130
|
-
cartRef.current = created;
|
|
131
|
-
if (mountedRef.current)
|
|
132
|
-
setCart(created);
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
// --- load Stripe.js on mount ---
|
|
136
|
-
useEffect(() => {
|
|
137
|
-
mountedRef.current = true;
|
|
138
|
-
if (!stripePublishableKey)
|
|
139
|
-
return undefined;
|
|
140
|
-
(() => __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
try {
|
|
142
|
-
const instance = yield loadStripe(stripePublishableKey);
|
|
143
|
-
if (mountedRef.current) {
|
|
144
|
-
setStripe(instance);
|
|
145
|
-
setStripeReady(true);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch (e) {
|
|
149
|
-
if (mountedRef.current)
|
|
150
|
-
setError(e.message);
|
|
151
|
-
}
|
|
152
|
-
}))();
|
|
153
|
-
return () => {
|
|
154
|
-
mountedRef.current = false;
|
|
155
|
-
};
|
|
156
|
-
}, [stripePublishableKey]);
|
|
157
|
-
// --- mount Stripe Elements once Stripe is loaded ---
|
|
158
|
-
useEffect(() => {
|
|
159
|
-
if (!stripe)
|
|
160
|
-
return;
|
|
161
|
-
if (!numberMountRef.current || !expiryMountRef.current || !cvcMountRef.current)
|
|
162
|
-
return;
|
|
163
|
-
// Hard guard — never recreate elements once mounted, even if stripe reference changes.
|
|
164
|
-
if (elementsMountedRef.current)
|
|
165
|
-
return;
|
|
166
|
-
elementsMountedRef.current = true;
|
|
167
|
-
setCardReady(false);
|
|
168
|
-
const elements = stripe.elements();
|
|
169
|
-
elementsRef.current = elements;
|
|
170
|
-
const number = elements.create('cardNumber', Object.assign(Object.assign({}, STRIPE_ELEMENT_OPTS), { showIcon: true }));
|
|
171
|
-
const expiry = elements.create('cardExpiry', STRIPE_ELEMENT_OPTS);
|
|
172
|
-
const cvc = elements.create('cardCvc', STRIPE_ELEMENT_OPTS);
|
|
173
|
-
number.mount(numberMountRef.current);
|
|
174
|
-
expiry.mount(expiryMountRef.current);
|
|
175
|
-
cvc.mount(cvcMountRef.current);
|
|
176
|
-
number.on('ready', () => {
|
|
177
|
-
if (mountedRef.current)
|
|
178
|
-
setCardReady(true);
|
|
179
|
-
});
|
|
180
|
-
number.on('change', (e) => {
|
|
181
|
-
var _a;
|
|
182
|
-
if (mountedRef.current)
|
|
183
|
-
setCardError(((_a = e.error) === null || _a === void 0 ? void 0 : _a.message) || '');
|
|
184
|
-
});
|
|
185
|
-
cardNumberElementRef.current = number;
|
|
186
|
-
}, [stripe]);
|
|
187
|
-
// --- on success ---
|
|
188
|
-
useEffect(() => {
|
|
189
|
-
var _a, _b;
|
|
190
|
-
if (status !== STATUS.SUBSCRIPTION_CREATED || completedRef.current)
|
|
191
|
-
return;
|
|
192
|
-
completedRef.current = true;
|
|
193
|
-
if (onComplete)
|
|
194
|
-
onComplete((_b = (_a = subscriptionIdQuery.data) === null || _a === void 0 ? void 0 : _a.biId) !== null && _b !== void 0 ? _b : null);
|
|
195
|
-
}, [status, subscriptionIdQuery.data, onComplete]);
|
|
196
|
-
// --- actions ---
|
|
197
|
-
const placeOrder = useCallback((consent) => {
|
|
198
|
-
setError('');
|
|
199
|
-
setCardError('');
|
|
200
|
-
if (phase === 'failed')
|
|
201
|
-
setCart(null);
|
|
202
|
-
setProcessingSubscription(true);
|
|
203
|
-
placeMutation.mutate(consent);
|
|
204
|
-
}, [placeMutation, phase]);
|
|
205
|
-
// Turn off processingSubscription once we reach a terminal status.
|
|
206
|
-
useEffect(() => {
|
|
207
|
-
if (!status)
|
|
208
|
-
return;
|
|
209
|
-
const terminalStatuses = [
|
|
210
|
-
STATUS.SUBSCRIPTION_CREATED,
|
|
211
|
-
STATUS.STRIPE_FAIL,
|
|
212
|
-
STATUS.SANCTION_BLOCK,
|
|
213
|
-
];
|
|
214
|
-
if (terminalStatuses.includes(status)) {
|
|
215
|
-
setProcessingSubscription(false);
|
|
216
|
-
}
|
|
217
|
-
}, [status]);
|
|
218
|
-
return {
|
|
219
|
-
phase,
|
|
220
|
-
status,
|
|
221
|
-
statusLabel: (status && STATUS_LABELS[status]) || 'Processing your order…',
|
|
222
|
-
stripeReady,
|
|
223
|
-
cardReady,
|
|
224
|
-
notConfigured,
|
|
225
|
-
showBanner,
|
|
226
|
-
dismissBanner: () => setShowBanner(false),
|
|
227
|
-
error,
|
|
228
|
-
clearError: () => setError(''),
|
|
229
|
-
cardError,
|
|
230
|
-
lastComment,
|
|
231
|
-
subscriptionDetails: (_g = subscriptionIdQuery.data) !== null && _g !== void 0 ? _g : null,
|
|
232
|
-
billing,
|
|
233
|
-
setField,
|
|
234
|
-
numberMountRef,
|
|
235
|
-
expiryMountRef,
|
|
236
|
-
cvcMountRef,
|
|
237
|
-
submitting: placeMutation.isPending,
|
|
238
|
-
processingSubscription,
|
|
239
|
-
placeOrder,
|
|
240
|
-
billingPlans: (_j = (_h = billingPlansQuery.data) === null || _h === void 0 ? void 0 : _h.plans) !== null && _j !== void 0 ? _j : [],
|
|
241
|
-
activeSubscriberCount: (_l = (_k = activeSubscriptionsQuery.data) === null || _k === void 0 ? void 0 : _k.active) !== null && _l !== void 0 ? _l : null,
|
|
242
|
-
selectedCycle,
|
|
243
|
-
setCycle: setSelectedCycle,
|
|
244
|
-
sessionReady,
|
|
245
|
-
userCountry,
|
|
246
|
-
course: (_m = courseDetailQuery.data) !== null && _m !== void 0 ? _m : null,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
//# sourceMappingURL=useCheckout.js.map
|