From a9bdc132e068571e779559bc6572d694d54f6feb Mon Sep 17 00:00:00 2001 From: Jessica Lawshe Date: Tue, 21 Feb 2023 09:24:57 -0600 Subject: [PATCH] Merge pull request #11844 from overleaf/jel-subscription-dash-change-to-group-submit [web] Submit group plan change on subscription dash GitOrigin-RevId: 5bc2644351c80189774ad3ac4cdcd622d354770f --- .../modals/change-to-group-modal.tsx | 50 +++++++++++++++---- .../modals/confirm-change-plan-modal.tsx | 8 +-- .../modals/keep-current-plan-modal.tsx | 4 +- .../subscription-dashboard-context.tsx | 13 ++--- .../subscription/data/subscription-url.ts | 2 +- .../util/recurly-group-plan-code.ts | 7 +++ .../subscription/util/recurly-pricing.ts | 3 +- .../active/change-plan/change-plan.test.tsx | 49 ++++++++++++++++-- 8 files changed, 108 insertions(+), 28 deletions(-) create mode 100644 services/web/frontend/js/features/subscription/util/recurly-group-plan-code.ts diff --git a/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx b/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx index 14bee2fb20..b9a18366fc 100644 --- a/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx +++ b/services/web/frontend/js/features/subscription/components/dashboard/states/active/change-plan/modals/change-to-group-modal.tsx @@ -1,13 +1,16 @@ -import { useEffect } from 'react' +import { useEffect, useState } from 'react' import { Modal } from 'react-bootstrap' import { useTranslation, Trans } from 'react-i18next' import { GroupPlans } from '../../../../../../../../../../types/subscription/dashboard/group-plans' import { Subscription } from '../../../../../../../../../../types/subscription/dashboard/subscription' import { PriceForDisplayData } from '../../../../../../../../../../types/subscription/plan' +import { postJSON } from '../../../../../../../../infrastructure/fetch-json' import AccessibleModal from '../../../../../../../../shared/components/accessible-modal' import getMeta from '../../../../../../../../utils/meta' import { useSubscriptionDashboardContext } from '../../../../../../context/subscription-dashboard-context' import GenericErrorAlert from '../../../../generic-error-alert' +import { subscriptionUpdateUrl } from '../../../../../../data/subscription-url' +import { getRecurlyGroupPlanCode } from '../../../../../../util/recurly-group-plan-code' const educationalPercentDiscount = 40 const groupSizeForEducationalDiscount = 10 @@ -138,14 +141,34 @@ export function ChangeToGroupModal() { } = useSubscriptionDashboardContext() const groupPlans: GroupPlans = getMeta('ol-groupPlans') const personalSubscription: Subscription = getMeta('ol-subscription') + const [error, setError] = useState(false) + const [inflight, setInflight] = useState(false) + + async function upgrade() { + setError(false) + setInflight(true) + + try { + await postJSON(subscriptionUpdateUrl, { + body: { + plan_code: getRecurlyGroupPlanCode( + groupPlanToChangeToCode, + groupPlanToChangeToSize, + groupPlanToChangeToUsage + ), + }, + }) + window.location.reload() + } catch (e) { + setError(true) + setInflight(false) + } + } useEffect(() => { - const defaultPlanOption = personalSubscription.plan.planCode.includes( - 'professional' - ) - ? 'professional' - : 'collaborator' - setGroupPlanToChangeToCode(defaultPlanOption) + if (personalSubscription.plan.planCode.includes('professional')) { + setGroupPlanToChangeToCode('professional') + } }, [personalSubscription, setGroupPlanToChangeToCode]) function handleGetInTouchButton() { @@ -331,13 +354,22 @@ export function ChangeToGroupModal() { {t('new_subscription_will_be_billed_immediately')}


+ {error && ( +
+ {t('generic_something_went_wrong')}. {t('try_again')}.{' '} + {t('generic_if_problem_continues_contact_us')}. +
+ )}