Skip to content

Commit

Permalink
Merge pull request #112 from Cavdy/ft-admin-staffs-view-all-accounts-…
Browse files Browse the repository at this point in the history
…165663799

#165663799 Admin and staff can view all accounts in account page
  • Loading branch information
Cavdy committed Apr 28, 2019
2 parents ad25878 + f71ac7d commit a5f0964
Show file tree
Hide file tree
Showing 12 changed files with 469 additions and 60 deletions.
10 changes: 3 additions & 7 deletions frontend-app/accounts.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ <h1 class="logo">Banka</h1>
<li class="sidebar-item sidebar-item-active">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./viewaccounts.html" class="sidebar-link">All Accounts</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
Expand Down Expand Up @@ -84,13 +87,6 @@ <h1 class="logo">Banka</h1>
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing
elit. Quae, optio?</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing.</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor sit amet consectetur adipisicing
elit. Nobis similique soluta sit impedit, provident laborum?</a>
</li>
</ul>
</div>
</div>
Expand Down
11 changes: 3 additions & 8 deletions frontend-app/activate.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ <h1 class="logo">Banka</h1>
<li class="sidebar-item">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./viewaccounts.html" class="sidebar-link">All Accounts</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
Expand Down Expand Up @@ -84,14 +87,6 @@ <h1 class="logo">Banka</h1>
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing
elit. Quae, optio?</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur
adipisicing.</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor sit amet consectetur adipisicing
elit. Nobis similique soluta sit impedit, provident laborum?</a>
</li>
</ul>
</div>
</div>
Expand Down
10 changes: 3 additions & 7 deletions frontend-app/adduser.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ <h1 class="logo">Banka</h1>
<li class="sidebar-item">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./viewaccounts.html" class="sidebar-link">All Accounts</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
Expand Down Expand Up @@ -84,13 +87,6 @@ <h1 class="logo">Banka</h1>
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing
elit. Quae, optio?</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing.</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor sit amet consectetur adipisicing
elit. Nobis similique soluta sit impedit, provident laborum?</a>
</li>
</ul>
</div>
</div>
Expand Down
29 changes: 28 additions & 1 deletion frontend-app/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ body,

.wrapper {
width: 100%;
height: 100vh;
display: flex;
}

Expand All @@ -63,7 +64,7 @@ body,
*/
.sidebar {
flex: 0 0 16rem;
min-height: 100vh;
height: 100%;
background-image: linear-gradient(to bottom, var(--sidebar-color-2), var(--sidebar-color-1));
transition: margin-left .3s;
display: flex;
Expand Down Expand Up @@ -92,6 +93,10 @@ body,
margin-bottom: auto;
}

.sidebar-list {
list-style: none;
}

.sidebar-item {
position: relative;
}
Expand Down Expand Up @@ -1115,6 +1120,28 @@ body,
=======================
*/

@media (min-width: 1600px) {
.container {
width: 100vw;
height: 100vh;
background-color: #006eb4;
background-image: url(../svg/rose.svg);
background-position: center;
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
background-size: cover;
display: flex;
align-items: center;
justify-content: center;
}

.wrapper {
height: 900px;
max-width: 1800px;
}
}

@media (max-width: 1140px) {
.showcase-content {
width: 90%;
Expand Down
10 changes: 3 additions & 7 deletions frontend-app/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ <h1 class="logo">Banka</h1>
<li class="sidebar-item">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./viewaccounts.html" class="sidebar-link">All Accounts</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
Expand Down Expand Up @@ -83,13 +86,6 @@ <h1 class="logo">Banka</h1>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quae, optio?</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor, sit amet consectetur adipisicing.</a>
</li>
<li class="item">
<a href="#" class="link">Lorem ipsum dolor sit amet consectetur adipisicing elit. Nobis similique
soluta sit impedit, provident laborum?</a>
</li>
</ul>
</div>
</div>
Expand Down
228 changes: 228 additions & 0 deletions frontend-app/js/allaccounts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
const token = sessionStorage.getItem('token');
const api = 'https://bankaapp-api.herokuapp.com/api';
const go = document.querySelector('#go');
const limitSelect = document.querySelector('#limit');
const successMsg = document.querySelector('.successMsg');
const errMsg = document.querySelector('.errMsg');
const userTable = document.querySelector('.user-table');
const queryForm = document.querySelector('.queryForm');
const search = document.querySelector('#search');

// DELETE FETCH REQUEST FOR ACCOUNTS
const deleteApi = (url) => {
fetch(url, {
method: 'DELETE',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
redirect: 'follow',
referrer: 'no-referrer',
})
.then(response => response.json());
};

// GET FETCH API REQUEST TO GET ALL ACCOUNTS OF A USER
const getAccountsApi = (url) => {
fetch(url, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
redirect: 'follow',
referrer: 'no-referrer',
})
.then((response) => {
if (response.status === 403) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be logged in to view accounts';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
errMsg.innerHTML = '';
return response.json();
}
})
.then((data1) => {
if (data1.status === 401) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be an admin or staff to view accounts';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
data1.data.map((i) => {
const table = document.querySelector('.table');
const tableRow = document.createElement('div');
tableRow.classList = 'table-row table-body';
const accountNumber = document.createElement('div');
accountNumber.className = 'account-index';
accountNumber.innerHTML = i.accountnumber;
const accountName = document.createElement('div');
accountName.className = 'account-name';
accountName.innerHTML = `${i.firstname} ${i.lastname}`;
const status = document.createElement('div');
status.className = 'account-status';
status.innerHTML = i.status;
const type = document.createElement('div');
type.className = 'activate';
type.innerHTML = i.type;
const deleteAccount = document.createElement('div');
deleteAccount.className = 'deactivate';
const aDeleteAccount = document.createElement('a');
aDeleteAccount.href = '#';
aDeleteAccount.className = 'deactivate-btn';
aDeleteAccount.innerHTML = 'Delete';
deleteAccount.appendChild(aDeleteAccount);
tableRow.appendChild(accountNumber);
tableRow.appendChild(accountName);
tableRow.appendChild(status);
tableRow.appendChild(type);
tableRow.appendChild(deleteAccount);
table.appendChild(tableRow);
});

// DELETE
const dels = document.querySelectorAll('.deactivate-btn');
dels.forEach((del) => {
del.addEventListener('click', (e) => {
const acnumber = e.target.parentElement.parentElement.children[0].innerHTML;
deleteApi(`${api}/v1/accounts/${acnumber}`);
e.target.parentElement.parentElement.remove();
successMsg.parentElement.style.display = 'flex';
successMsg.innerHTML = 'Account successfully deleted';
setInterval(() => {
location.reload(true);
}, 3000);
});
});
}
return data1;
});
};
getAccountsApi(`${api}/v1/accounts?limit=${limitSelect.value}`);

// GET FETCH API REQUEST TO GET A SPECIFIC ACCOUNT OF A USER
const getSpecficAccountApi = (url) => {
fetch(url, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
redirect: 'follow',
referrer: 'no-referrer',
})
.then((response) => {
if (response.status === 403) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be logged in to view accounts';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
errMsg.innerHTML = '';
return response.json();
}
})
.then((data1) => {
if (data1.status === 401) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be an admin or staff to view accounts';
} else if (data1.status === 404) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'no account found';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
const i = data1.data;
const table = document.querySelector('.table');
const tableRow = document.createElement('div');
tableRow.classList = 'table-row table-body';
const accountNumber = document.createElement('div');
accountNumber.className = 'account-index';
accountNumber.innerHTML = i.accountnumber;
const accountName = document.createElement('div');
accountName.className = 'account-name';
accountName.innerHTML = `${i.firstname} ${i.lastname}`;
const status = document.createElement('div');
status.className = 'account-status';
status.innerHTML = i.status;
const type = document.createElement('div');
type.className = 'activate';
type.innerHTML = i.type;
const deleteAccount = document.createElement('div');
deleteAccount.className = 'deactivate';
const aDeleteAccount = document.createElement('a');
aDeleteAccount.href = '#';
aDeleteAccount.className = 'deactivate-btn';
aDeleteAccount.innerHTML = 'Delete';
deleteAccount.appendChild(aDeleteAccount);
tableRow.appendChild(accountNumber);
tableRow.appendChild(accountName);
tableRow.appendChild(status);
tableRow.appendChild(type);
tableRow.appendChild(deleteAccount);
table.appendChild(tableRow);

// DELETE
const dels = document.querySelectorAll('.deactivate-btn');
dels.forEach((del) => {
del.addEventListener('click', (e) => {
const acnumber = e.target.parentElement.parentElement.children[0].innerHTML;
deleteApi(`${api}/v1/accounts/${acnumber}`);
e.target.parentElement.parentElement.remove();
successMsg.parentElement.style.display = 'flex';
successMsg.innerHTML = 'Account successfully deleted';
setInterval(() => {
location.reload(true);
}, 3000);
});
});

return data1;
}
});
};

go.addEventListener('click', (e) => {
e.preventDefault();
const tableBodies = document.querySelectorAll('.table-body');
tableBodies.forEach((tableBody) => {
tableBody.remove();
});

getAccountsApi(`${api}/v1/accounts?limit=${limitSelect.value}`);
});

search.addEventListener('keyup', (e) => {
e.preventDefault();
const tableBodies = document.querySelectorAll('.table-body');
tableBodies.forEach((tableBody) => {
tableBody.remove();
});

getSpecficAccountApi(`${api}/v1/accounts/${search.value}`);
});
Loading

0 comments on commit a5f0964

Please sign in to comment.