ostp/ostp-client/src/tui/components/traffic.rs

40 lines
1.5 KiB
Rust

use ratatui::layout::Rect;
use ratatui::layout::{Constraint, Direction, Layout};
use ratatui::style::{Color, Style};
use ratatui::widgets::{Block, Borders, Sparkline};
use ratatui::Frame;
use crate::app::AppState;
pub struct TrafficComponent;
impl TrafficComponent {
pub fn render(&self, frame: &mut Frame<'_>, area: Rect, state: &AppState) {
let rows = Layout::default()
.direction(Direction::Vertical)
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)])
.split(area);
let incoming = Sparkline::default()
.block(Block::default()
.title(" ▼ INCOMING TRAFFIC DISTRIBUTION ")
.borders(Borders::ALL)
.border_type(ratatui::widgets::BorderType::Rounded)
.border_style(Style::default().fg(Color::Green)))
.data(&state.incoming_history)
.style(Style::default().fg(Color::LightGreen));
let outgoing = Sparkline::default()
.block(Block::default()
.title(" ▲ OUTGOING TRAFFIC DISTRIBUTION ")
.borders(Borders::ALL)
.border_type(ratatui::widgets::BorderType::Rounded)
.border_style(Style::default().fg(Color::Magenta)))
.data(&state.outgoing_history)
.style(Style::default().fg(Color::LightMagenta));
frame.render_widget(incoming, rows[0]);
frame.render_widget(outgoing, rows[1]);
}
}