import React from "react"; import { useTranslation } from "react-i18next"; import { useCreateStripeCheckoutSession } from "#/hooks/mutation/stripe/use-create-stripe-checkout-session"; import { useBalance } from "#/hooks/query/use-balance"; import { cn } from "#/utils/utils"; import MoneyIcon from "#/icons/money.svg?react"; import { SettingsInput } from "../settings/settings-input"; import { BrandButton } from "../settings/brand-button"; import { LoadingSpinner } from "#/components/shared/loading-spinner"; import { amountIsValid } from "#/utils/amount-is-valid"; import { I18nKey } from "#/i18n/declaration"; export function PaymentForm() { const { t } = useTranslation(); const { data: balance, isLoading } = useBalance(); const { mutate: addBalance, isPending } = useCreateStripeCheckoutSession(); const [buttonIsDisabled, setButtonIsDisabled] = React.useState(true); const billingFormAction = async (formData: FormData) => { const amount = formData.get("top-up-input")?.toString(); if (amount?.trim()) { if (!amountIsValid(amount)) return; const intValue = parseInt(amount, 10); addBalance({ amount: intValue }); } setButtonIsDisabled(true); }; const handleTopUpInputChange = (value: string) => { setButtonIsDisabled(!amountIsValid(value)); }; return (
{t(I18nKey.PAYMENT$MANAGE_CREDITS)}
{!isLoading && ( ${Number(balance).toFixed(2)} )} {isLoading && }
{t(I18nKey.PAYMENT$ADD_CREDIT)} {isPending && }
); }