'use client'; import React, { useState } from 'react'; import { Box, Button, FormControl, FormLabel, Input, VStack, useToast, NumberInput, NumberInputField, NumberInputStepper, NumberIncrementStepper, NumberDecrementStepper, useColorModeValue, } from '@chakra-ui/react'; interface TransferBalanceProps { userBalance: number; onTransfer: (recipientUsername: string, amount: number) => Promise; } export const TransferBalance: React.FC = ({ userBalance, onTransfer, }) => { const [recipientUsername, setRecipientUsername] = useState(''); const [amount, setAmount] = useState(0); const [isLoading, setIsLoading] = useState(false); const toast = useToast(); const bgColor = useColorModeValue('white', 'gray.800'); const borderColor = useColorModeValue('gray.200', 'gray.700'); const handleTransfer = async () => { if (!recipientUsername || amount <= 0) { toast({ title: 'Ошибка валидации', description: 'Пожалуйста, заполните все поля корректно', status: 'error', duration: 3000, isClosable: true, }); return; } if (amount > userBalance) { toast({ title: 'Недостаточно средств', description: 'У вас недостаточно Campfire монет для перевода', status: 'error', duration: 3000, isClosable: true, }); return; } setIsLoading(true); try { await onTransfer(recipientUsername, amount); toast({ title: 'Перевод успешен!', description: `Вы перевели ${amount} 🔥 пользователю ${recipientUsername}`, status: 'success', duration: 3000, isClosable: true, }); setRecipientUsername(''); setAmount(0); } catch (error) { toast({ title: 'Ошибка перевода', description: 'Не удалось выполнить перевод. Проверьте имя пользователя и попробуйте снова', status: 'error', duration: 3000, isClosable: true, }); } finally { setIsLoading(false); } }; return ( Имя получателя setRecipientUsername(e.target.value)} placeholder="Введите имя пользователя" /> Сумма перевода setAmount(value)} min={1} max={userBalance} > ); };