import React, { useState, useEffect } from 'react'; import '../css/transferBox.css'; import { IoIosClose } from "react-icons/io"; import { FaUser, FaMoneyBillWave } from "react-icons/fa"; import axios from 'axios'; const TransferBox = ({ show, onClose }) => { const [users, setUsers] = useState([]); const [loading, setLoading] = useState(false); const [searchTermSender, setSearchTermSender] = useState(''); const [searchTermRecipient, setSearchTermRecipient] = useState(''); const [selectedSenderAccount, setSelectedSenderAccount] = useState(null); const [selectedRecipientAccount, setSelectedRecipientAccount] = useState(null); const [amount, setAmount] = useState(''); const [note, setNote] = useState(''); const [transferSuccess, setTransferSuccess] = useState(false); const BASE_URL = "http://localhost:8000"; const fetchData = async () => { try { setLoading(true); const response = await axios.get(`${BASE_URL}/bank/accounts`); const sortedUsers = response.data.data.sort((a, b) => new Date(b.created_at) - new Date(a.created_at)); setUsers(sortedUsers); } catch (error) { console.error("Error fetching data: " + error); } finally { setLoading(false); } }; useEffect(() => { fetchData(); }, []); const filterUsers = (users, searchTerm) => { return users.filter(user => user.accountNumber.includes(searchTerm) || user.accountName.toLowerCase().includes(searchTerm.toLowerCase()) ); }; const filteredUsersSender = filterUsers(users, searchTermSender); const filteredUsersRecipient = filterUsers(users, searchTermRecipient); const handleTransfer = async () => { if (!selectedSenderAccount || !selectedRecipientAccount || !amount) { alert("Please select a sender account, a recipient account, and enter an amount."); return; } if (parseFloat(amount) > selectedSenderAccount.accountBalance) { alert("Insufficient balance in the sender's account!"); return; } try { const transfer = { sender_account_id: selectedSenderAccount.accountId, receiver_account_id: selectedRecipientAccount.accountId, amount: parseInt(amount), note: note }; const token = localStorage.getItem('token'); await axios.post(`${BASE_URL}/bank/transfer`, transfer, { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`, }, }); setTransferSuccess(true); fetchData(); setTimeout(() => { setTransferSuccess(false); onClose(); }, 2000); } catch (error) { console.error("An error occurred during the transfer: " + error); alert("An error occurred. Please try again."); } }; const handleAccountSelect = (user, isSender) => { if (isSender) { setSelectedSenderAccount(user); setSearchTermSender(`${user.accountName} (${user.accountNumber})`); } else { setSelectedRecipientAccount(user); setSearchTermRecipient(`${user.accountName} (${user.accountNumber})`); } }; const renderAccountList = (filteredUsers, isSender) => (
{loading ? (
Loading...
) : filteredUsers.length > 0 ? ( filteredUsers.map(user => (
handleAccountSelect(user, isSender)} >
{user.accountName} {user.bankName} TR {user.accountNumber} (Balance: {user.accountBalance}₺)
)) ) : (
No results found
)}
); if (!show) { return null; } return (

Transfer Between Accounts

{transferSuccess && (
Transfer completed successfully!
)}
Sender Account
setSearchTermSender(e.target.value)} /> {searchTermSender && renderAccountList(filteredUsersSender, true)}
Recipient Account
setSearchTermRecipient(e.target.value)} /> {searchTermRecipient && renderAccountList(filteredUsersRecipient, false)}
Amount to Transfer
setAmount(e.target.value)} />
Note
setNote(e.target.value)} />
); }; export default TransferBox;