eazygit 0.5.1

A fast TUI for Git with staging, conflicts, rebase, and palette-first UX
Documentation
//! PR helper popup rendering.

use crate::app::AppState;
use crate::ui::style::{self, Emphasis};
use ratatui::Frame;
use ratatui::layout::Rect;
use ratatui::widgets::{Clear, List, ListItem};
use super::utils;

/// Render the PR helper popup.
pub fn render(frame: &mut Frame, area: Rect, state: &AppState) {
    let max_idx = state.pr_list.len().saturating_sub(1);
    let selected = state.pr_selected.min(max_idx);

    let items: Vec<ListItem> = if state.pr_list.is_empty() {
        vec![ListItem::new("No PRs found").style(style::text(&state.theme, Emphasis::Muted))]
    } else {
        state
            .pr_list
            .iter()
            .enumerate()
            .map(|(i, pr)| {
                let style_item = if i == selected {
                    style::selection(&state.theme)
                } else {
                    style::body_style(&state.theme)
                };
                ListItem::new(format!("#{} {}", pr.number, pr.title)).style(style_item)
            })
            .collect()
    };

    let title = format!(
        "PR helper [{} / {}] (Enter=checkout, o=open, Esc=close)",
        selected.saturating_add(1),
        state.pr_list.len().max(1)
    );
    let popup = utils::center_rect(60, 50, area);
    frame.render_widget(Clear, popup);

    let list = List::new(items)
        .style(style::body_style(&state.theme))
        .block(style::pane_block(&state.theme, title.to_string(), true));

    frame.render_widget(list, popup);
}