endpoint_validator/tui/widgets/
list.rs1use ratatui::{
2 style::{Color, Modifier, Style},
3 text::{Span, Spans},
4 widgets::{Block, Borders, List, ListItem},
5};
6
7pub fn create_list_widget<'a>(items: &'a [String], selected: usize, is_focused: bool) -> List<'a> {
8 let visible_items = &items[selected as usize..];
9 let list_items: Vec<ListItem> = visible_items
10 .iter()
11 .enumerate()
12 .map(|(i, item)| {
13 let style = if i == 0 {
14 Style::default().bg(Color::Blue).fg(Color::Gray)
15 } else {
16 Style::default().fg(Color::Gray)
17 };
18 ListItem::new(Span::styled(item.clone(), style))
19 })
20 .collect();
21
22 let title = Spans::from(vec![Span::styled(
23 "Endpoints",
24 Style::default().fg(if is_focused {
25 Color::Yellow
26 } else {
27 Color::Gray
28 }),
29 )]);
30
31 let list = List::new(list_items)
32 .block(
33 Block::default()
34 .borders(Borders::ALL)
35 .border_style(Style::default().fg(if is_focused {
36 Color::Yellow
37 } else {
38 Color::Gray
39 }))
40 .title(title),
41 )
42 .highlight_style(
43 Style::default()
44 .fg(Color::LightCyan)
45 .add_modifier(Modifier::BOLD),
46 );
47
48 list
49}