You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
3.9 KiB
153 lines
3.9 KiB
import React, { useContext, useState, useEffect } from 'react';
|
|
import ExpenseItem from './ExpenseItem';
|
|
import { AppContext } from '../context/AppContext';
|
|
import './css/ExpenseList.css'
|
|
|
|
const ExpenseList = () => {
|
|
const [whole, setWhole] = useState('');
|
|
const [decimal, setDecimal] = useState('');
|
|
const [transaction, setTransactions] = useState('');
|
|
const [category, setCategories] = useState('');
|
|
const [time, setTime] = useState('');
|
|
|
|
function getSessionKey() {
|
|
var cookies = document.cookie.split(';');
|
|
for (let i = 0; i < cookies.length; i++) {
|
|
const cookie = cookies[i].trim(); // Remove any leading or trailing whitespace
|
|
if (cookie.startsWith('session=')) {
|
|
return cookie.substring('session='.length, cookie.length); // Extract the value of the cookie
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
async function getTransactionsBalance() {
|
|
try {
|
|
const response = await fetch('https://api.bb.gabefarrell.com/w/transactions/recent', {
|
|
method: 'GET',
|
|
headers: {
|
|
'x-session-key': getSessionKey(),
|
|
},
|
|
});
|
|
const data = await response.json();
|
|
let whole = data.transactions.map((item)=>item.amount.whole);
|
|
let decimal = data.transactions.map((item)=>item.amount.decimal);
|
|
let balance = [];
|
|
for (let i = 0; i < whole.length; i++) {
|
|
let expense_balance = whole[i] + '.' + decimal[i];
|
|
balance.push(expense_balance);
|
|
}
|
|
|
|
//console.log(whole + decimal + "<- total recent transacations");
|
|
//console.log(whole, decimal, balance);
|
|
//const transactions_balance = whole + '.' + decimal;
|
|
//console.log(whole, decimal, category);
|
|
return balance;
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
async function getTransactionsCategory() {
|
|
try {
|
|
const response = await fetch('https://api.bb.gabefarrell.com/w/transactions/recent', {
|
|
method: 'GET',
|
|
headers: {
|
|
'x-session-key': getSessionKey(),
|
|
},
|
|
});
|
|
const data = await response.json();
|
|
const category = data.transactions.map((item)=>item.category);
|
|
|
|
//console.log(category);
|
|
return category;
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
async function getDate() {
|
|
try {
|
|
const response = await fetch('https://api.bb.gabefarrell.com/w/transactions/recent', {
|
|
method: 'GET',
|
|
headers: {
|
|
'x-session-key': getSessionKey(),
|
|
},
|
|
});
|
|
const data = await response.json();
|
|
const timestamp = data.transactions.map((item)=>item.timestamp);
|
|
let dateFormat = [];
|
|
let date, month, day;
|
|
for (let i = 0; i < timestamp.length; i++) {
|
|
date = new Date(timestamp[i]);
|
|
month = date.getMonth();
|
|
day = date.getDay();
|
|
console.log(month, day);
|
|
dateFormat.push(month + '/' + day);
|
|
}
|
|
//let dateFormat = new Date(timestamp[0]);
|
|
// console.log(date);
|
|
return dateFormat;
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
async function buildTable(data1, data2, data3){
|
|
var table = document.getElementById('myTable')
|
|
|
|
for (var i = 0; i < data1.length; i++){
|
|
var row = `<tr>
|
|
<td>${data1[i]}</td>
|
|
<td>$${data2[i]}</td>
|
|
|
|
</tr>`
|
|
table.innerHTML += row
|
|
|
|
|
|
}
|
|
}
|
|
|
|
buildTable(category, transaction, time);
|
|
|
|
async function fetchTransactions() {
|
|
const categories = await getTransactionsCategory();
|
|
const transaction_balance = await getTransactionsBalance();
|
|
const date = await getDate();
|
|
|
|
|
|
|
|
setCategories(categories);
|
|
setTransactions(transaction_balance);
|
|
setTime(date);
|
|
}
|
|
|
|
useEffect(() => {
|
|
fetchTransactions(); //b36efa01-7824-4f61-a274-63131b58d8fe
|
|
}, [])
|
|
|
|
|
|
return (
|
|
<div className='widget'>
|
|
{/* <input
|
|
type='text'
|
|
className='form-control mb-2 mr-sm-2'
|
|
placeholder='Type to search...'
|
|
onChange={handleChange}
|
|
/> */}
|
|
|
|
<h4>Recent Transactions</h4>
|
|
{/* <h4>{category}</h4>
|
|
<h4>{transaction}</h4> */}
|
|
<table><tbody id="myTable">
|
|
|
|
</tbody></table>
|
|
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default ExpenseList;
|