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 filteredUsersSender = users.filter(user => user.accountNumber?.includes(searchTermSender) || user.accountName?.toLowerCase().includes(searchTermSender.toLowerCase()) ); const filteredUsersRecipient = users.filter(user => user.accountNumber?.includes(searchTermRecipient) || user.accountName?.toLowerCase().includes(searchTermRecipient.toLowerCase()) ); 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 handleSenderSelect = (user) => { setSelectedSenderAccount(user); setSearchTermSender(`${user.accountName} (${user.accountNumber})`); }; const handleRecipientSelect = (user) => { setSelectedRecipientAccount(user); setSearchTermRecipient(`${user.accountName} (${user.accountNumber})`); }; if (!show) { return null; } return (

Transfer Between Accounts

{transferSuccess && (
Transfer completed successfully!
)}
Sender Account
setSearchTermSender(e.target.value)} /> {searchTermSender.length > 0 && filteredUsersSender.length > 0 && (
{loading ? (
Loading...
) : filteredUsersSender.length > 0 ? ( filteredUsersSender.map(user => (
handleSenderSelect(user)} >
{user.accountName} {user.bankName} TR {user.accountNumber} (Balance: {user.accountBalance}₺)
)) ) : (
No results found
)}
)}
Recipient Account
setSearchTermRecipient(e.target.value)} /> {searchTermRecipient.length > 0 && filteredUsersRecipient.length > 0 && (
{loading ? (
Loading...
) : filteredUsersRecipient.length > 0 ? ( filteredUsersRecipient.map(user => (
handleRecipientSelect(user)} >
{user.accountName} {user.bankName} TR {user.accountNumber} (Balance: {user.accountBalance}₺)
)) ) : (
No results found
)}
)}
Amount to Transfer
setAmount(e.target.value)} />
Note
setNote(e.target.value)} />
); }; export default TransferBox;