client/views/user/transactions.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Banka | My Account</title>
<link rel="icon" type="image/x-icon" href="../../assets/img/logo.png">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="../../assets/css/main.css">
<link rel="stylesheet" type="text/css" href="../../assets/css/responsive.css">
</head>
<body>
<!-- Modal -->
<div class="ad-modal">
<button onclick="modalOpen(false)" class="modal-close">×</button>
<div class="modal-content center"></div>
</div>
<!-- Progress -->
<span class="progress-bar"></span>
<nav id="ad-nav">
<a href="../../../index.html">
<div id="logo">
<img src="../../assets/img/logo.png" alt="logo">
</div>
</a>
<div class="ad-nav-right">
<img id="avatar"
onclick="openDropDown(true)"
class="dropbtn"
src="../../assets/img/avatar.png"
/>
<!-- Dropdown content -->
<div class="dropdown-content" id="dropdown">
<a href="#" onclick="event.preventDefault();return logout();">
<i class="fas fa-info-circle"></i>
Logout
</a>
</div>
<!-- Hamburger links -->
<a href="#" onclick="event.preventDefault();openSlideMenu(this)">
<span class="open-slide">
<i class="fas fa-align-right fa-2x"></i>
</span>
</a>
<!-- Toast -->
<div class="toast success">
<img src="../../assets/img/check-mark.gif" alt="check-mark">
</div>
<div class="toast error">
<img src="../../assets/img/cross-mark.jpg" alt="cross-mark">
</div>
<!-- Side nav -->
<div id="side-menu" class="side-nav">
<li><a href="profile.html">Dashboard</a></li>
<li><a href="transactions.html">My transactions</a></li>
<li onclick="event.preventDefault();return logout();"><a href="#">Logout</a></li>
</div>
</div>
</nav>
<div class="ad-main">
<section>
<aside>
<ul>
<a href="profile.html">
<li>
<i class="fas fa-chart-line"></i>
Dashboard
</li>
</a>
<a href="transactions.html">
<li style="background: #076969">
<i class="fas fa-history"></i>
My transactions
</li>
</a>
<a href="#">
<li onclick="event.preventDefault();return logout();">
<i class="fas fa-info-circle"></i>
Logout
</li>
</a>
</ul>
</aside>
</section>
<section class="ad-main-showcase">
<div class="toast">Success</div>
<header><h2 class="header">Transaction history</h2></header>
<div class="ad-main-content">
<table>
<tbody>
<tr>
<th>REF/ID</th>
<th>Account No.</th>
<th>Type</th>
<th>Date</th>
<th></th>
</tr>
</tbody>
</table>
</div>
</section>
</div>
<script>
const handleSelectedTransaction = (id) => {
sessionStorage.setItem('transactionId', id);
location.assign(`${ghPagesUrlRedirect(location.origin)}/client/views/user/transaction-single.html`);
}
</script>
<script>
document.addEventListener("DOMContentLoaded", () => {
withAuth();
const token = getAuthToken();
const config = {
headers: {
'Content-Type': 'application/json',
'x-access-token': token
}
};
const email = getUser();
// Get all user's transactions
(function() {
const start = new Date();
const url = new URL(env.url());
fetch(`${url.href}/user/${email}/accounts/`, config)
.then(response => response.json())
.then(json => {
if (json.status === 401) {
localStorage.clear();
showToast(false, errorResponse(json.error))
handleLoadingComplete(true, 1)
return redirect.home();
}
if (json.status < 300) {
// loop through accounts and fetch transactions for each
json.data.map((account) => {
fetch(`${url.href}/accounts/${account.account_number}/transactions`, config)
.then(response => response.json())
.then(json_ => {
if (json_.status < 300) {
const tableBody = document.querySelector('tbody');
json_.data.map((transaction) => {
const { created_at, account_number, transaction_id } = transaction;
const date = new Date(created_at);
let tableRow = document.createElement('tr');
tableRow.innerHTML = `
<td>
${String(account_number).slice(-3) + transaction_id}
</td>
<td>${account_number}</td>
<td>${transaction.type[0].toUpperCase()}${transaction.type.slice(1)}</td>
<td>${date.toDateString()}</td>
<td><a href="#"><button onclick="handleSelectedTransaction(${transaction_id})">View</button></a></td>
`;
tableBody.appendChild(tableRow);
});
return handleLoadingComplete(false, 1, '#fff')
} else if (json_.status === 401) {
localStorage.clear();
showToast(false, errorResponse(json.error))
handleLoadingComplete(true, 1)
return redirect.home();
} else {
showToast(false, 'Unable to fetch data');
return handleLoadingComplete(true, 1)
}
})
.catch(error => {
showToast(false, 'Try again');
return handleLoadingComplete(true, 1)
})
});
} else if (json.status == 404){
showToast(false, errorResponse(json.error));
return handleLoadingComplete(false, 1, '#fff')
} else {
showToast(false, errorResponse(json.error));
return handleLoadingComplete(true, 1)
}
}).
catch(error => {
showToast(false, 'Try again');
return handleLoadingComplete(true, 1)
});
return null;
})();
});
</script>
<script src="../../assets/js/main.js"></script>
<script src="../../assets/js/utils.js"></script>
<script src="../../assets/js/middleware.js"></script>
<script src="../../assets/js/dashboard.js"></script>
<script defer src="https://use.fontawesome.com/releases/v5.8.1/js/all.js" integrity="sha384-g5uSoOSBd7KkhAMlnQILrecXvzst9TdC09/VM+pjDTCM+1il8RHz5fKANTFFb+gQ" crossorigin="anonymous"></script>
</body>
</html>