Skip to main content

endpoint_validator/tui/widgets/
list.rs

1use 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}