personal-subscription.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { Trans, useTranslation } from 'react-i18next'
  2. import { RecurlySubscription } from '../../../../../../types/subscription/dashboard/subscription'
  3. import { ActiveSubscription } from './states/active/active'
  4. import { CanceledSubscription } from './states/canceled'
  5. import { ExpiredSubscription } from './states/expired'
  6. import { useSubscriptionDashboardContext } from '../../context/subscription-dashboard-context'
  7. import PersonalSubscriptionRecurlySyncEmail from './personal-subscription-recurly-sync-email'
  8. function PastDueSubscriptionAlert({
  9. subscription,
  10. }: {
  11. subscription: RecurlySubscription
  12. }) {
  13. const { t } = useTranslation()
  14. return (
  15. <>
  16. <div className="alert alert-danger" role="alert">
  17. {t('account_has_past_due_invoice_change_plan_warning')}{' '}
  18. <a
  19. href={subscription.recurly.accountManagementLink}
  20. target="_blank"
  21. rel="noreferrer noopener"
  22. >
  23. {t('view_your_invoices')}
  24. </a>
  25. </div>
  26. </>
  27. )
  28. }
  29. function PersonalSubscriptionStates({
  30. subscription,
  31. }: {
  32. subscription: RecurlySubscription
  33. }) {
  34. const { t } = useTranslation()
  35. const state = subscription?.recurly.state
  36. if (state === 'active') {
  37. return <ActiveSubscription subscription={subscription} />
  38. } else if (state === 'canceled') {
  39. return <CanceledSubscription subscription={subscription} />
  40. } else if (state === 'expired') {
  41. return <ExpiredSubscription subscription={subscription} />
  42. } else {
  43. return <>{t('problem_with_subscription_contact_us')}</>
  44. }
  45. }
  46. function PersonalSubscription() {
  47. const { t } = useTranslation()
  48. const { personalSubscription, recurlyLoadError } =
  49. useSubscriptionDashboardContext()
  50. if (!personalSubscription) return null
  51. if (!('recurly' in personalSubscription)) {
  52. return (
  53. <p>
  54. <Trans
  55. i18nKey="please_contact_support_to_makes_change_to_your_plan"
  56. components={[<a href="/contact" />]} // eslint-disable-line react/jsx-key, jsx-a11y/anchor-has-content
  57. />
  58. </p>
  59. )
  60. }
  61. return (
  62. <>
  63. {personalSubscription.recurly.account.has_past_due_invoice._ ===
  64. 'true' && (
  65. <PastDueSubscriptionAlert subscription={personalSubscription} />
  66. )}
  67. <PersonalSubscriptionStates
  68. subscription={personalSubscription as RecurlySubscription}
  69. />
  70. {recurlyLoadError && (
  71. <div className="alert alert-warning" role="alert">
  72. <strong>{t('payment_provider_unreachable_error')}</strong>
  73. </div>
  74. )}
  75. <hr />
  76. <PersonalSubscriptionRecurlySyncEmail />
  77. </>
  78. )
  79. }
  80. export default PersonalSubscription