| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import { Trans, useTranslation } from 'react-i18next'
- import ContactSupport from './contact-support-for-custom-subscription'
- import GroupSubscriptionMemberships from './group-subscription-memberships'
- import InstitutionMemberships from './institution-memberships'
- import FreePlan from './free-plan'
- import ManagedPublishers from './managed-publishers'
- import PersonalSubscription from './personal-subscription'
- import ManagedGroupSubscriptions from './managed-group-subscriptions'
- import ManagedInstitutions from './managed-institutions'
- import { useSubscriptionDashboardContext } from '../../context/subscription-dashboard-context'
- import getMeta from '../../../../utils/meta'
- import PremiumFeaturesLink from './premium-features-link'
- import OLPageContentCard from '@/shared/components/ol/ol-page-content-card'
- import OLRow from '@/shared/components/ol/ol-row'
- import OLCol from '@/shared/components/ol/ol-col'
- import OLNotification from '@/shared/components/ol/ol-notification'
- import WritefullManagedBundleAddOn from './states/active/change-plan/modals/writefull-bundle-management-modal'
- import RedirectAlerts from './redirect-alerts'
- import { PaidSubscription } from '@ol-types/subscription/dashboard/subscription'
- function SubscriptionDashboard() {
- const { t } = useTranslation()
- const {
- hasDisplayedSubscription,
- hasSubscription,
- hasValidActiveSubscription,
- personalSubscription,
- } = useSubscriptionDashboardContext()
- const fromPlansPage = new URLSearchParams(window.location.search).has(
- 'hasSubscription'
- )
- const subscription = personalSubscription as PaidSubscription
- const hasAiAssistViaWritefull = getMeta('ol-hasAiAssistViaWritefull')
- const hasRedirectedPaymentError = Boolean(
- getMeta('ol-subscriptionPaymentErrorCode')
- )
- const hasPendingPlan =
- subscription &&
- subscription.pendingPlan &&
- subscription.pendingPlan.name !== subscription.plan.name
- const nextPaymentDueDate = subscription?.payment?.nextPaymentDueDate
- return (
- <div className="container">
- <OLRow>
- <OLCol lg={{ span: 8, offset: 2 }}>
- {hasPendingPlan && (
- <OLNotification
- className="mb-4"
- aria-live="polite"
- content={
- <div>
- <Trans
- i18nKey="pending_subscription_message"
- values={{
- planName: personalSubscription?.pendingPlan?.name,
- activationDate: nextPaymentDueDate,
- }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- components={[
- // eslint-disable-next-line react/jsx-key
- <strong />,
- ]}
- />
- </div>
- }
- type="success"
- />
- )}
- {fromPlansPage && (
- <OLNotification
- className="mb-4"
- aria-live="polite"
- content={t('you_already_have_a_subscription')}
- type="warning"
- />
- )}
- {hasRedirectedPaymentError && (
- <OLNotification
- className="mb-4"
- aria-live="polite"
- content={
- <Trans
- i18nKey="payment_error_generic"
- components={[
- /* eslint-disable-next-line jsx-a11y/anchor-has-content, react/jsx-key */
- <a href="/contact" target="_blank" />,
- ]}
- />
- }
- type="error"
- />
- )}
- <RedirectAlerts />
- <OLPageContentCard>
- <div className="page-header">
- <h1>{t('your_subscriptions')}</h1>
- </div>
- <div>
- <PersonalSubscription />
- <ManagedGroupSubscriptions />
- <ManagedInstitutions />
- <ManagedPublishers />
- <GroupSubscriptionMemberships />
- <InstitutionMemberships />
- {!personalSubscription && hasAiAssistViaWritefull && (
- <div className="mb-4">
- <h2 className="h3 fw-bold">{t('add_ons')}</h2>
- <WritefullManagedBundleAddOn />
- </div>
- )}
- {hasValidActiveSubscription && (
- <PremiumFeaturesLink subscription={personalSubscription} />
- )}
- {!hasDisplayedSubscription &&
- (hasSubscription ? <ContactSupport /> : <FreePlan />)}
- </div>
- </OLPageContentCard>
- </OLCol>
- </OLRow>
- </div>
- )
- }
- export default SubscriptionDashboard
|