use std::error::Error;
use ratatui::widgets::TableState;
use sqlite::Connection;
use crate::{data_layer, entities::*};
pub struct TrxTable {
trx: Vec<Transaction>,
ac_id: i64,
pub state: TableState,
}
impl TrxTable {
pub fn new() -> TrxTable {
let mut list_state = TableState::default();
list_state.select_first();
return TrxTable {
trx: Vec::new(),
state: list_state,
ac_id: 0,
};
}
pub fn get_trx(
&mut self,
ac_id: i64,
con: &Connection,
) -> Result<Vec<Transaction>, Box<dyn Error>> {
if ac_id == -1 {
return Ok(Vec::new());
}
if self.trx.iter().count() == 0 || self.ac_id != ac_id {
self.ac_id = ac_id;
self.trx = data_layer::get_account_transactions(con, ac_id)?;
}
return Ok(self.trx.clone());
}
pub fn selected_tr(&self) -> Transaction {
if let Some(i) = self.state.selected() {
match self.trx.get(i) {
Some(t) => return t.clone(),
None => return Transaction::new_empty(),
}
}
return Transaction::new_empty();
}
pub fn add_tr(&mut self, tr: Transaction) {
self.trx.insert(0, tr);
}
}