trippy_tui/frontend/render/
flows.rs1use crate::frontend::tui_app::TuiApp;
2use crate::t;
3use ratatui::layout::{Alignment, Rect};
4use ratatui::style::{Modifier, Style};
5use ratatui::text::Line;
6use ratatui::widgets::{Bar, BarChart, BarGroup, Block, BorderType, Borders};
7use ratatui::Frame;
8
9pub fn render(f: &mut Frame<'_>, rect: Rect, app: &TuiApp) {
11 let round_flow_id = app.tracer_data().round_flow_id();
12 let data: Vec<_> = app
13 .flow_counts
14 .iter()
15 .map(|(flow_id, count)| {
16 let bar_color = if flow_id == &app.selected_flow {
17 app.tui_config.theme.flows_chart_bar_selected
18 } else {
19 app.tui_config.theme.flows_chart_bar_unselected
20 };
21 let label_color = if flow_id == &round_flow_id {
22 app.tui_config.theme.flows_chart_text_current
23 } else {
24 app.tui_config.theme.flows_chart_text_non_current
25 };
26 Bar::default()
27 .label(Line::from(format!("{flow_id}")))
28 .value(*count as u64)
29 .style(Style::default().fg(bar_color))
30 .value_style(
31 Style::default()
32 .bg(bar_color)
33 .fg(label_color)
34 .add_modifier(Modifier::BOLD),
35 )
36 })
37 .collect();
38 let block = Block::default()
39 .title(Line::raw(t!("title_flows")))
40 .title_alignment(Alignment::Left)
41 .borders(Borders::ALL)
42 .border_type(BorderType::Rounded)
43 .border_style(Style::default().fg(app.tui_config.theme.border))
44 .style(
45 Style::default()
46 .bg(app.tui_config.theme.bg)
47 .fg(app.tui_config.theme.text),
48 );
49 let group = BarGroup::default().bars(&data);
50 let flow_counts = BarChart::default()
51 .block(block)
52 .data(group)
53 .bar_width(4)
54 .bar_gap(1);
55 f.render_widget(flow_counts, rect);
56}