From 1b87df18bc42b0f4491d881465ffdead96de4762 Mon Sep 17 00:00:00 2001 From: Antonella Sgarlatta Date: Tue, 7 Sep 2021 11:19:51 -0300 Subject: [PATCH] feat: get plan name from subscriptions endpoint --- .../panes/account/Subscription.tsx | 103 ++++++++++++------ 1 file changed, 69 insertions(+), 34 deletions(-) diff --git a/app/assets/javascripts/preferences/panes/account/Subscription.tsx b/app/assets/javascripts/preferences/panes/account/Subscription.tsx index 0a3c79bd4..712964a17 100644 --- a/app/assets/javascripts/preferences/panes/account/Subscription.tsx +++ b/app/assets/javascripts/preferences/panes/account/Subscription.tsx @@ -8,43 +8,35 @@ import { Button } from '@/components/Button'; import { observer } from '@node_modules/mobx-react-lite'; import { WebApplication } from '@/ui_models/application'; import { useEffect, useState } from 'preact/hooks'; -import { GetSubscriptionResponse } from '@standardnotes/snjs/dist/@types/services/api/responses'; +import { + GetSubscriptionResponse, + GetSubscriptionsResponse, +} from '@standardnotes/snjs/dist/@types/services/api/responses'; type Props = { application: WebApplication; }; -enum PlanName { - CorePlan = 'CORE_PLAN', - PlusPlan = 'PLUS_PLAN', - ProPlan = 'PRO_PLAN', -} - type Subscription = { + planName: string; cancelled: boolean; - planName: PlanName; endsAt: number; }; +type AvailableSubscriptions = { + [key: string]: { + name: string; + }; +}; + type SubscriptionInformationProps = { subscription?: Subscription; + availableSubscriptions: AvailableSubscriptions; }; type ValidSubscriptionProps = { subscription: Subscription; -}; - -const mapPlanNameToString = (planName: PlanName) => { - switch (planName) { - case 'CORE_PLAN': - return 'Core'; - case 'PLUS_PLAN': - return 'Plus'; - case 'PRO_PLAN': - return 'Pro'; - default: - return ''; - } + availableSubscriptions: AvailableSubscriptions; }; const NoSubscription = () => ( @@ -67,12 +59,15 @@ const NoSubscription = () => ( ); -const ActiveSubscription = ({ subscription }: ValidSubscriptionProps) => ( +const ActiveSubscription = ({ + subscription, + availableSubscriptions, +}: ValidSubscriptionProps) => ( <> Your{' '} - Standard Notes {mapPlanNameToString(subscription.planName)} + Standard Notes {availableSubscriptions[subscription.planName]} {' '} subscription will be{' '} @@ -103,12 +98,15 @@ const ActiveSubscription = ({ subscription }: ValidSubscriptionProps) => ( ); -const CancelledSubscription = ({ subscription }: ValidSubscriptionProps) => ( +const CancelledSubscription = ({ + subscription, + availableSubscriptions, +}: ValidSubscriptionProps) => ( <> Your{' '} - Standard Notes {mapPlanNameToString(subscription.planName)} + Standard Notes {availableSubscriptions[subscription.planName]} {' '} subscription has been{' '} @@ -142,13 +140,20 @@ const CancelledSubscription = ({ subscription }: ValidSubscriptionProps) => ( const SubscriptionInformation = ({ subscription, + availableSubscriptions, }: SubscriptionInformationProps) => { const now = new Date().getTime(); if (subscription && subscription.endsAt > now) { return subscription.cancelled ? ( - + ) : ( - + ); } return ; @@ -157,16 +162,39 @@ const SubscriptionInformation = ({ const Subscription = observer(({ application }: Props) => { const [subscription, setSubscription] = useState(undefined); + const [availableSubscriptions, setAvailableSubscriptions] = + useState({}); + const [error, setError] = useState(false); useEffect(() => { - const getSubscription = async () => { - const result = await application.getUserSubscription(); - if (!result.error && result.data) { - const data = (result as GetSubscriptionResponse).data; - const subscription = data!.subscription; - setSubscription(subscription); + const getSubscriptions = async () => { + try { + const result = await application.getSubscriptions(); + if (result.data) { + const data = (result as GetSubscriptionsResponse).data; + setAvailableSubscriptions(data!); + } else { + setError(true); + } + } catch (e) { + setError(true); } }; + const getSubscription = async () => { + try { + const result = await application.getUserSubscription(); + if (!result.error && result.data) { + const data = (result as GetSubscriptionResponse).data; + const subscription = data!.subscription; + setSubscription(subscription); + } else { + setError(true); + } + } catch (e) { + setError(true); + } + }; + getSubscriptions(); getSubscription(); }, [application]); @@ -176,7 +204,14 @@ const Subscription = observer(({ application }: Props) => {
Subscription - + {error ? ( + 'No subscription information available.' + ) : ( + + )}