82 lines
1.9 KiB
Rust
82 lines
1.9 KiB
Rust
use ratatui::widgets::ListState;
|
|
use sqlite::Connection;
|
|
|
|
use crate::{
|
|
data_layer,
|
|
entities::{Account, AccountType},
|
|
};
|
|
|
|
pub enum CurrentScreen {
|
|
Main,
|
|
Exiting,
|
|
}
|
|
pub enum CurrentWidget {
|
|
AccountList,
|
|
TrxInfo,
|
|
TrxList,
|
|
}
|
|
|
|
pub struct AccountList {
|
|
accounts: Vec<Account>,
|
|
pub state: ListState,
|
|
}
|
|
impl AccountList {
|
|
fn new() -> AccountList {
|
|
return AccountList {
|
|
accounts: Vec::new(),
|
|
state: ListState::default(),
|
|
};
|
|
}
|
|
|
|
fn get_accounts(&self, con: &Connection) -> Vec<Account> {
|
|
if self.accounts.iter().count() == 0 {
|
|
return data_layer::get_accounts(con);
|
|
}
|
|
return self.accounts.clone();
|
|
}
|
|
}
|
|
|
|
pub struct App {
|
|
pub current_screen: CurrentScreen,
|
|
pub current_widget: CurrentWidget,
|
|
pub acc_list: AccountList,
|
|
pub connection: Connection,
|
|
exit: bool,
|
|
}
|
|
|
|
impl App {
|
|
pub fn new() -> App {
|
|
let con = match Connection::open("ft_rs.db") {
|
|
Ok(con) => con,
|
|
Err(e) => {
|
|
eprintln!("Error opening database: {}", e);
|
|
panic!("stopping");
|
|
}
|
|
};
|
|
return App {
|
|
current_screen: CurrentScreen::Main,
|
|
current_widget: CurrentWidget::AccountList,
|
|
acc_list: AccountList::new(),
|
|
connection: con,
|
|
exit: false,
|
|
};
|
|
}
|
|
|
|
pub fn get_list_accounts(&self) -> Vec<Account> {
|
|
let mut accounts = self.acc_list.get_accounts(&self.connection);
|
|
let all = Account::new(0, "All".to_string(), AccountType::Cash);
|
|
accounts.insert(0, all);
|
|
return accounts;
|
|
}
|
|
|
|
pub fn first_ac(&mut self) {
|
|
self.acc_list.state.select_first();
|
|
}
|
|
pub fn next_ac(&mut self) {
|
|
self.acc_list.state.select_next();
|
|
}
|
|
pub fn previous_ac(&mut self) {
|
|
self.acc_list.state.select_previous();
|
|
}
|
|
}
|