personal-subscription.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { useTranslation } from 'react-i18next'
  2. import { Subscription } 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. function PastDueSubscriptionAlert({
  8. subscription,
  9. }: {
  10. subscription: Subscription
  11. }) {
  12. const { t } = useTranslation()
  13. return (
  14. <>
  15. <div className="alert alert-danger" role="alert">
  16. {t('account_has_past_due_invoice_change_plan_warning')}{' '}
  17. <a
  18. href={subscription.recurly.accountManagementLink}
  19. target="_blank"
  20. rel="noreferrer noopener"
  21. >
  22. {t('view_your_invoices')}
  23. </a>
  24. </div>
  25. </>
  26. )
  27. }
  28. function PersonalSubscriptionStates({
  29. subscription,
  30. }: {
  31. subscription: Subscription
  32. }) {
  33. const { t } = useTranslation()
  34. const state = subscription?.recurly?.state
  35. if (state === 'active') {
  36. return <ActiveSubscription subscription={subscription} />
  37. } else if (state === 'canceled') {
  38. return <CanceledSubscription subscription={subscription} />
  39. } else if (state === 'expired') {
  40. return <ExpiredSubscription subscription={subscription} />
  41. } else {
  42. return <>{t('problem_with_subscription_contact_us')}</>
  43. }
  44. }
  45. function PersonalSubscription() {
  46. const { t } = useTranslation()
  47. const { personalSubscription, recurlyLoadError } =
  48. useSubscriptionDashboardContext()
  49. if (!personalSubscription) return null
  50. return (
  51. <>
  52. {personalSubscription.recurly.account.has_past_due_invoice._ ===
  53. 'true' && (
  54. <PastDueSubscriptionAlert subscription={personalSubscription} />
  55. )}
  56. <PersonalSubscriptionStates subscription={personalSubscription} />
  57. {recurlyLoadError && (
  58. <div className="alert alert-warning" role="alert">
  59. <strong>{t('payment_provider_unreachable_error')}</strong>
  60. </div>
  61. )}
  62. <hr />
  63. </>
  64. )
  65. }
  66. export default PersonalSubscription