"use client"; import { useEffect } from "react"; import { useTranslation } from "@/lib/i18n/client"; import { api } from "@/lib/trpc"; import { CreditCard, Loader2 } from "lucide-react"; import { Alert, AlertDescription } from "../ui/alert"; import { Badge } from "../ui/badge"; import { Button } from "../ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "../ui/card"; import { Skeleton } from "../ui/skeleton"; import { toast } from "../ui/use-toast"; export default function SubscriptionSettings() { const { t } = useTranslation(); const { data: subscriptionStatus, refetch, isLoading: isQueryLoading, } = api.subscriptions.getSubscriptionStatus.useQuery(); const { data: subscriptionPrice } = api.subscriptions.getSubscriptionPrice.useQuery(); const { mutate: syncStripeState } = api.subscriptions.syncWithStripe.useMutation({ onSuccess: () => { refetch(); }, }); const createCheckoutSession = api.subscriptions.createCheckoutSession.useMutation({ onSuccess: (resp) => { if (resp.url) { window.location.href = resp.url; } }, onError: () => { toast({ description: t("common.something_went_wrong"), variant: "destructive", }); }, }); const createPortalSession = api.subscriptions.createPortalSession.useMutation( { onSuccess: (resp) => { if (resp.url) { window.location.href = resp.url; } }, onError: () => { toast({ description: t("common.something_went_wrong"), variant: "destructive", }); }, }, ); const isLoading = createCheckoutSession.isPending || createPortalSession.isPending; useEffect(() => { syncStripeState(); }, []); const formatDate = (date: Date | null) => { if (!date) return "N/A"; return new Intl.DateTimeFormat("en-US", { year: "numeric", month: "long", day: "numeric", }).format(date); }; const getStatusBadge = (status: "free" | "paid") => { switch (status) { case "paid": return ( {t("settings.subscription.paid")} ); case "free": return ( {t("settings.subscription.free")} ); } }; return ( {t("settings.subscription.subscription")} {t("settings.subscription.manage_subscription")} {isQueryLoading ? (
) : ( <>
{subscriptionStatus?.tier && getStatusBadge(subscriptionStatus.tier)}
{subscriptionStatus?.hasActiveSubscription && ( <>
{formatDate(subscriptionStatus.startDate)} -{" "} {formatDate(subscriptionStatus.endDate)}
)}
{!subscriptionStatus?.hasActiveSubscription ? (

{t("settings.subscription.paid_plan")}

{t("settings.subscription.unlock_bigger_quota")}

{subscriptionPrice && subscriptionPrice.amount ? (

{subscriptionPrice.amount / 100}{" "} {subscriptionPrice.currency}

) : ( )}
) : (
{subscriptionStatus.cancelAtPeriodEnd && ( {t("settings.subscription.subscription_canceled", { date: formatDate(subscriptionStatus.endDate), })} )}
)}
)}
); }