From ffad39e6b74f03112e549881be0a1140d0a7bc79 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 14 Sep 2025 20:26:22 -0400 Subject: [PATCH] add subscription info --- .../src/lib/panes/BillingSettingsPane.tsx | 38 +++------- frontend/libs/state/subscription/src/index.ts | 2 + .../src/lib/subscription-plan-details.ts | 23 +++++++ .../src/lib/subscription-plans.ts | 69 +++++++++++++++++++ 4 files changed, 104 insertions(+), 28 deletions(-) create mode 100644 frontend/libs/state/subscription/src/lib/subscription-plan-details.ts create mode 100644 frontend/libs/state/subscription/src/lib/subscription-plans.ts diff --git a/frontend/libs/components/settings-modal/src/lib/panes/BillingSettingsPane.tsx b/frontend/libs/components/settings-modal/src/lib/panes/BillingSettingsPane.tsx index 9b8a22c4b3..a7bbfc0b22 100644 --- a/frontend/libs/components/settings-modal/src/lib/panes/BillingSettingsPane.tsx +++ b/frontend/libs/components/settings-modal/src/lib/panes/BillingSettingsPane.tsx @@ -10,43 +10,25 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { usePricingModalStore } from "@storyteller/ui-pricing-modal"; import { useCreditsModalStore } from "@storyteller/ui-pricing-modal"; import { useCreditsState } from "@storyteller/credits"; -import { useSubscriptionState } from "@storyteller/subscription"; +import { FREE_PLAN, SubscriptionPlanDetails, useSubscriptionState } from "@storyteller/subscription"; +import { SUBSCRIPTION_PLANS_BY_SLUG } from "@storyteller/subscription"; interface BillingSettingsPaneProps {} -interface BillingInfo { - credits: { - remaining: number; - total: number; - }; - plan: string; - nextPayment: { - amount: string; - date: string; - }; -} - export const BillingSettingsPane = (args: BillingSettingsPaneProps) => { - const [billingInfo] = useState({ - credits: { - remaining: 180, - total: 1000, - }, - plan: "Pro Plan", - nextPayment: { - amount: "$99", - date: "Oct 18", - }, - }); const creditsStore = useCreditsState(); const sumTotalCredits = creditsStore.totalCredits; const subscriptionStore = useSubscriptionState(); - // TODO: Clean this up - const maybePlanName = subscriptionStore.subscriptionInfo?.productSlug; - const planName = maybePlanName || "Free Plan"; + const maybePlanSlug = subscriptionStore.subscriptionInfo?.productSlug; + + const currentPlan : SubscriptionPlanDetails = maybePlanSlug ? + SUBSCRIPTION_PLANS_BY_SLUG.get(maybePlanSlug) || FREE_PLAN : + FREE_PLAN; + + const isPaidPlan = currentPlan.slug !== "free"; useEffect(() => { creditsStore.fetchFromServer(); @@ -67,7 +49,7 @@ export const BillingSettingsPane = (args: BillingSettingsPaneProps) => { icon={faStar} className="text-[#C03FFF] text-lg" /> - {planName} + {currentPlan.name}