git_same/setup/screens/
complete.rs1use crate::setup::state::SetupState;
4use ratatui::layout::{Constraint, Layout, Rect};
5use ratatui::style::{Color, Modifier, Style};
6use ratatui::text::{Line, Span};
7use ratatui::widgets::Paragraph;
8use ratatui::Frame;
9
10pub fn render(state: &SetupState, frame: &mut Frame, area: Rect) {
11 let chunks = Layout::vertical([
12 Constraint::Length(3), Constraint::Min(10), Constraint::Length(2), ])
16 .split(area);
17
18 let title_text = if state.is_first_setup {
20 "Workspace Created!"
21 } else {
22 "Workspace Added!"
23 };
24 let title = Paragraph::new(Line::from(vec![
25 Span::styled(
26 " \u{2713} ",
27 Style::default()
28 .fg(Color::Rgb(21, 128, 61))
29 .add_modifier(Modifier::BOLD),
30 ),
31 Span::styled(
32 title_text,
33 Style::default()
34 .fg(Color::Rgb(21, 128, 61))
35 .add_modifier(Modifier::BOLD),
36 ),
37 ]));
38 frame.render_widget(title, chunks[0]);
39
40 let selected_orgs = state.selected_orgs();
42 let total_repos: usize = state
43 .orgs
44 .iter()
45 .filter(|o| o.selected)
46 .map(|o| o.repo_count)
47 .sum();
48 let org_count = selected_orgs.len();
49
50 let value_style = Style::default()
51 .fg(Color::White)
52 .add_modifier(Modifier::BOLD);
53 let dim = Style::default().fg(Color::DarkGray);
54 let yellow = Style::default().fg(Color::Yellow);
55
56 let lines = vec![
57 Line::raw(""),
58 Line::from(Span::styled(format!(" {}", state.base_path), value_style)),
59 Line::from(Span::styled(
60 format!(
61 " {} organization{} \u{00b7} {} repos",
62 org_count,
63 if org_count == 1 { "" } else { "s" },
64 total_repos
65 ),
66 dim,
67 )),
68 Line::raw(""),
69 Line::raw(""),
70 Line::from(Span::styled(" Press Enter to continue", yellow)),
71 ];
72
73 let content = Paragraph::new(lines);
74 frame.render_widget(content, chunks[1]);
75
76 let help = Paragraph::new("Enter Dashboard Esc Back").style(dim);
78 frame.render_widget(help, chunks[2]);
79}
80
81#[cfg(test)]
82#[path = "complete_tests.rs"]
83mod tests;