envelope_cli/tui/views/
mod.rs1pub mod account_list;
7pub mod budget;
8pub mod reconcile;
9pub mod register;
10pub mod sidebar;
11pub mod status_bar;
12
13use ratatui::Frame;
14
15use super::app::{ActiveDialog, ActiveView, App};
16use super::dialogs;
17use super::layout::AppLayout;
18
19pub fn render(frame: &mut Frame, app: &mut App) {
21 let layout = AppLayout::new(frame.area());
22
23 sidebar::render(frame, app, layout.sidebar);
25
26 match app.active_view {
28 ActiveView::Accounts => {
29 account_list::render_main(frame, app, layout.main);
30 }
31 ActiveView::Register => {
32 register::render(frame, app, layout.main);
33 }
34 ActiveView::Budget => {
35 budget::render(frame, app, layout.main);
36 }
37 ActiveView::Reports => {
38 render_placeholder(frame, layout.main, "Reports");
40 }
41 ActiveView::Reconcile => {
42 reconcile::render(frame, app, layout.main);
43 }
44 }
45
46 status_bar::render(frame, app, layout.status_bar);
48
49 if app.has_dialog() {
51 render_dialog(frame, app);
52 }
53}
54
55fn render_dialog(frame: &mut Frame, app: &mut App) {
57 match &app.active_dialog {
58 ActiveDialog::Help => {
59 dialogs::help::render(frame, app);
60 }
61 ActiveDialog::CommandPalette => {
62 dialogs::command_palette::render(frame, app);
63 }
64 ActiveDialog::Confirm(message) => {
65 dialogs::confirm::render(frame, message);
66 }
67 ActiveDialog::AddTransaction | ActiveDialog::EditTransaction(_) => {
68 dialogs::transaction::render(frame, app);
69 }
70 ActiveDialog::MoveFunds => {
71 dialogs::move_funds::render(frame, app);
72 }
73 ActiveDialog::BulkCategorize => {
74 dialogs::bulk_categorize::render(frame, app);
75 }
76 ActiveDialog::ReconcileStart => {
77 dialogs::reconcile_start::render(frame, app);
78 }
79 ActiveDialog::UnlockConfirm(state) => {
80 dialogs::unlock_confirm::render(frame, state);
81 }
82 ActiveDialog::Adjustment => {
83 dialogs::adjustment::render(frame, app);
84 }
85 ActiveDialog::Budget => {
86 dialogs::budget::render(frame, app);
87 }
88 ActiveDialog::Income => {
89 dialogs::income::render(frame, app);
90 }
91 ActiveDialog::AddAccount | ActiveDialog::EditAccount(_) => {
92 dialogs::account::render(frame, app);
93 }
94 ActiveDialog::AddCategory | ActiveDialog::EditCategory(_) => {
95 dialogs::category::render(frame, app);
96 }
97 ActiveDialog::AddGroup | ActiveDialog::EditGroup(_) => {
98 dialogs::group::render(frame, app);
99 }
100 ActiveDialog::None => {}
101 }
102}
103
104fn render_placeholder(frame: &mut Frame, area: ratatui::layout::Rect, name: &str) {
106 use ratatui::style::{Color, Style};
107 use ratatui::widgets::{Block, Borders, Paragraph};
108
109 let block = Block::default()
110 .title(name)
111 .borders(Borders::ALL)
112 .border_style(Style::default().fg(Color::White));
113
114 let text = Paragraph::new(format!("{} view - Coming soon!", name))
115 .block(block)
116 .style(Style::default().fg(Color::White));
117
118 frame.render_widget(text, area);
119}