import { useQuery } from '@tanstack/react-query'; import { useNavigate, useSearchParams } from 'react-router'; import { useTranslation } from 'react-i18next'; import { motion } from 'framer-motion'; import { balanceApi } from '../api/balance'; import { useCurrency } from '../hooks/useCurrency'; import { Card } from '@/components/data-display/Card'; import { staggerContainer, staggerItem } from '@/components/motion/transitions'; import PaymentMethodIcon from '@/components/PaymentMethodIcon'; export default function TopUpMethodSelect() { const { t } = useTranslation(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); const { formatAmount, currencySymbol } = useCurrency(); const { data: paymentMethods, isLoading } = useQuery({ queryKey: ['payment-methods'], queryFn: balanceApi.getPaymentMethods, }); const handleMethodClick = (methodId: string) => { const params = new URLSearchParams(); const amount = searchParams.get('amount'); const returnTo = searchParams.get('returnTo'); if (amount) params.set('amount', amount); if (returnTo) params.set('returnTo', returnTo); const qs = params.toString(); navigate(`/balance/top-up/${methodId}${qs ? `?${qs}` : ''}`); }; return (

{t('balance.selectPaymentMethod')}

{isLoading ? (
) : !paymentMethods || paymentMethods.length === 0 ? (
{t('balance.noPaymentMethods')}
) : (
{paymentMethods.map((method) => { const methodKey = method.id.toLowerCase().replace(/-/g, '_'); const translatedName = t(`balance.paymentMethods.${methodKey}.name`, { defaultValue: '', }); const translatedDesc = t(`balance.paymentMethods.${methodKey}.description`, { defaultValue: '', }); return ( method.is_available && handleMethodClick(method.id)} >
{translatedName || method.name}
{(translatedDesc || method.description) && (
{translatedDesc || method.description}
)}
{formatAmount(method.min_amount_kopeks / 100, 0)} –{' '} {formatAmount(method.max_amount_kopeks / 100, 0)} {currencySymbol}
); })}
)} ); }