Compare commits

..

No commits in common. "b4380f2125945691a13c8694155b2059a933956b" and "7d1613b0c8526b0d10477ccfe9c36c94bcdacf2c" have entirely different histories.

6 changed files with 10 additions and 96 deletions

0
src/db.rs Normal file
View file

View file

@ -1,3 +0,0 @@
pub mod transaction;
pub use self::transaction::TransactionRecord;

View file

@ -1,33 +0,0 @@
use std::borrow::Cow;
// cargo add crust_decimal
pub struct TransactionRecord {
pub id: usize,
// pub amount: Decimal,
pub amount: String,
//pub record_date: Date,
pub date: String,
}
impl TransactionRecord {
pub fn new(id: usize, amount: String, record_date: String) -> TransactionRecord {
TransactionRecord {
id,
amount,
date: record_date
}
}
pub fn get_header() -> String {
return format!(" {:<7} | {:<9} | {:<10}", "Id", "Amount", "Date")
}
pub fn to_string(&self) -> String {
return format!(" T{:0>6} | {:>9} | {:>10}", self.id, self.amount, self.date)
}
pub fn as_str(&self) -> Cow<str> {
return self.to_string().into()
}
}

View file

@ -6,4 +6,3 @@ pub mod tui;
pub mod ui; pub mod ui;
pub mod uis; pub mod uis;
pub mod db;

View file

@ -1,5 +1,6 @@
use std::io; use std::io;
use std::time::Duration; use std::time::Duration;
use crossterm::event::{self, Event, KeyCode, KeyEventKind};
use ratatui::{ use ratatui::{
backend::CrosstermBackend, backend::CrosstermBackend,

View file

@ -1,21 +1,21 @@
use crossterm::event::{KeyEvent, KeyEventKind, KeyCode}; use crossterm::event::{KeyEvent, KeyEventKind, KeyCode};
use ratatui::{backend::Backend, Frame, layout::{Rect, Layout, Direction, Constraint}, widgets::{Block, Borders, List, ListItem, Paragraph}, text::{Text, Line, Span}, style::{Style, Color, Modifier}}; use ratatui::{backend::Backend, Frame, layout::Rect, widgets::{Block, Borders, List, ListItem}, text::Text, style::{Style, Color, Modifier}};
use crate::{app::{App, StatefulList}, db::TransactionRecord}; use crate::app::{App, StatefulList};
pub struct HistoryState { pub struct HistoryState {
pub transacts_list: StatefulList<TransactionRecord> pub transacts_list: StatefulList<String>
} }
impl HistoryState { impl HistoryState {
pub fn new() -> HistoryState { pub fn new() -> HistoryState {
HistoryState { HistoryState {
transacts_list: StatefulList::with_items(vec![ transacts_list: StatefulList::with_items(vec![
TransactionRecord::new(1, "$10.00".to_string(), "05-01-2020".to_string()), "Item0".to_string(),
TransactionRecord::new(2, "$10.00".to_string(), "05-01-2020".to_string()), "Item1".to_string(),
TransactionRecord::new(3, "$10.00".to_string(), "05-01-2020".to_string()), "Item2".to_string(),
TransactionRecord::new(4, "$10.00".to_string(), "05-01-2020".to_string()), "Item3".to_string(),
TransactionRecord::new(5, "$10.00".to_string(), "05-01-2020".to_string()), "Item4".to_string(),
]) ])
} }
} }
@ -34,56 +34,6 @@ impl HistoryState {
} }
pub fn render_history_tab<B: Backend> (f: &mut Frame<B>, body_rect: Rect, app: &mut App) { pub fn render_history_tab<B: Backend> (f: &mut Frame<B>, body_rect: Rect, app: &mut App) {
let split_body = Layout::default()
.direction(Direction::Horizontal)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)])
.split(body_rect);
let mut lines: Vec<Line> = vec![];
if app.states.history.transacts_list.state.selected().is_some(){
let selected_item: &TransactionRecord = &app.states.history.transacts_list.items[app.states.history.transacts_list.state.selected().unwrap()];
let ident_style: Style = Style::default().fg(Color::Yellow);
let value_style: Style = Style::default().fg(Color::LightBlue);
lines.push(
Line::from(vec![
Span::styled("Transaction Id: ", ident_style),
Span::styled(format!("T{:0>6}", selected_item.id), value_style),
])
);
lines.push(
Line::from(vec![
Span::styled("Amount: ", ident_style),
Span::styled(format!("{}", selected_item.amount), value_style)
])
);
lines.push(
Line::from(vec![
Span::styled("Transaction Date: ", ident_style),
Span::styled(format!("{}", selected_item.date), value_style)
])
);
}
let paragraph = Paragraph::new(lines.clone())
.block(Block::default().borders(Borders::ALL).title("Details").title_alignment(ratatui::layout::Alignment::Left));
f.render_widget(paragraph, split_body[1]);
let list_chunks = Layout::default()
.direction(Direction::Vertical)
.constraints([Constraint::Length(1), Constraint::Min(3)])
.split(split_body[0]);
let list_header = Paragraph::new(
Text::styled(TransactionRecord::get_header(), Style::default().fg(Color::Black).bg(Color::Cyan))
).block(Block::default().borders(Borders::NONE));
f.render_widget(list_header, list_chunks[0]);
// Iterate through all elements in the `items` app and append some debug text to it. // Iterate through all elements in the `items` app and append some debug text to it.
let items: Vec<ListItem> = app let items: Vec<ListItem> = app
.states.history.transacts_list .states.history.transacts_list
@ -102,5 +52,5 @@ pub fn render_history_tab<B: Backend> (f: &mut Frame<B>, body_rect: Rect, app: &
.add_modifier(Modifier::BOLD) .add_modifier(Modifier::BOLD)
); );
f.render_stateful_widget(history_items, list_chunks[1], &mut app.states.history.transacts_list.state) f.render_stateful_widget(history_items, body_rect, &mut app.states.history.transacts_list.state)
} }