bcode_tui 0.0.1-alpha.0

Terminal user interface for bcode
//! TUI worktree picker rendering.

use bmux_tui::paint::PaintCx;
use bmux_tui::prelude::{Line, Span, Style};
use bmux_tui::style::Modifier;

use super::picker_render::{
    picker_list_area, render_picker_chrome, render_picker_list, render_picker_status,
};
use super::render::TuiTheme;
use super::worktree_picker::WorktreePickerApp;

/// Render the worktree picker.
pub fn render_picker(app: &mut WorktreePickerApp, frame: &mut PaintCx<'_, '_>, theme: TuiTheme) {
    let Some((inner, list_y)) = render_picker_chrome(
        " Worktrees ",
        &header_line(),
        app.filter_mut(),
        "Filter worktrees",
        frame,
        theme,
    ) else {
        return;
    };

    let bottom_y = render_picker_status(inner, app.status(), theme.muted, frame, theme);
    let Some(list_area) = picker_list_area(inner, list_y, bottom_y) else {
        return;
    };
    let items = app.list_items(theme.muted);
    render_picker_list(
        &items,
        app.list_render_state(list_area.height),
        list_area,
        frame,
        theme,
    );
}

fn header_line() -> Line {
    Line::from_spans(vec![
        Span::styled("Bcode worktrees", Style::new().add_modifier(Modifier::BOLD)),
        Span::raw("  Enter attaches current session  Esc cancels"),
    ])
}