diff_tool/view/
mod.rs

1pub mod body;
2pub mod footer;
3pub mod header;
4
5use ratatui::{
6    layout::{Constraint, Layout, Rect},
7    Frame,
8};
9
10use crate::app::App;
11
12use self::{body::render_body, footer::render_footer, header::render_header};
13
14/// Renders all the components
15pub fn view(model: &mut App, f: &mut Frame) {
16    // Term size
17    let size = f.size();
18    check_size(&size);
19
20    let [header, body, footer] = Layout::vertical([
21        Constraint::Length(3),
22        Constraint::Min(10),
23        Constraint::Max(10),
24    ])
25    .areas(size);
26
27    render_header(f, header);
28
29    render_body(model, f, body);
30
31    render_footer(model, footer, f);
32}
33
34/// Checks terminal size is large enough
35fn check_size(f: &Rect) {
36    if f.width < 52 {
37        panic!("Require width >= 52, (got {})", f.width);
38    }
39    if f.height < 28 {
40        panic!("Require height >= 28, (got {})", f.height);
41    }
42}