rdice-tui 0.1.1

Terminal UI for persistent dice trays powered by rdice-core
Documentation
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::widgets::{Block, Borders, Paragraph};

use crate::app::App;

pub fn render(frame: &mut Frame<'_>, area: Rect, app: &App) {
    frame.render_widget(
        Paragraph::new(render_text(app)).block(
            Block::default()
                .title(" Tray Manager ")
                .borders(Borders::ALL),
        ),
        area,
    );
}

pub fn render_text(app: &App) -> String {
    let body = app
        .engine
        .list_trays()
        .iter()
        .skip(app.tray_manager_page * 9)
        .take(9)
        .enumerate()
        .map(|(index, tray)| {
            let global_id = app.tray_manager_page * 9 + index + 1;
            format!(
                "[{}|{}] {}: {} slots",
                global_id,
                index + 1,
                tray.name,
                tray.slots.len()
            )
        })
        .collect::<Vec<_>>()
        .join("\n");
    if body.is_empty() {
        "No trays on this page. Press n to create one.".to_string()
    } else {
        body
    }
}