"use client"; import { ProgressBar } from "@tremor/react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import ServerTrans from "@calcom/lib/components/ServerTrans"; import { IS_SMS_CREDITS_ENABLED } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { useParamsWithFallback } from "@calcom/lib/hooks/useParamsWithFallback"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import { TextField, Label, InputError } from "@calcom/ui/components/form"; import { showToast } from "@calcom/ui/toast"; import { BillingCreditsSkeleton } from "./BillingCreditsSkeleton"; export default function BillingCredits() { const { t } = useLocale(); const router = useRouter(); const { register, handleSubmit, setValue, formState: { errors }, } = useForm<{ quantity: number }>({ defaultValues: { quantity: 50 } }); const params = useParamsWithFallback(); const teamId = params.id ? Number(params.id) : undefined; const { data: creditsData, isLoading } = trpc.viewer.credits.getAllCredits.useQuery({ teamId }); const buyCreditsMutation = trpc.viewer.credits.buyCredits.useMutation({ onSuccess: (data) => { if (data.sessionUrl) { router.push(data.sessionUrl); } }, onError: () => { showToast(t("credit_purchase_failed"), "error"); }, }); if (!IS_SMS_CREDITS_ENABLED) { return null; } if (isLoading && teamId) return ; if (!creditsData) return null; const onSubmit = (data: { quantity: number }) => { buyCreditsMutation.mutate({ quantity: data.quantity, teamId }); }; const teamCreditsPercentageUsed = creditsData.credits.totalMonthlyCredits > 0 ? (creditsData.credits.totalRemainingMonthlyCredits / creditsData.credits.totalMonthlyCredits) * 100 : 0; return (

{t("credits")}

Learn more , ]} />

{creditsData.credits.totalMonthlyCredits > 0 ? (
{t("total_credits", { totalCredits: creditsData.credits.totalMonthlyCredits, })}
{t("remaining_credits", { remainingCredits: creditsData.credits.totalRemainingMonthlyCredits, })}
) : ( <> )}
{creditsData.credits.additionalCredits}

{t("buy_additional_credits")}
setValue("quantity", Number(e.target.value))} min={50} addOnSuffix={<>{t("credits")}} /> {errors.quantity && }
); }