wiki_tui/components/
logger.rs1use std::sync::Arc;
2
3use anyhow::Result;
4use ratatui::{
5 prelude::Rect,
6 style::{Color, Style},
7};
8use tokio::sync::mpsc;
9use tui_logger::{TuiLoggerWidget, TuiWidgetState};
10
11use crate::{
12 action::Action,
13 config::{Config, Theme},
14 terminal::Frame,
15};
16
17use super::Component;
18
19#[derive(Default)]
20pub struct LoggerComponent {
21 state: TuiWidgetState,
22 config: Arc<Config>,
23 theme: Arc<Theme>,
24}
25
26impl Component for LoggerComponent {
27 fn init(
28 &mut self,
29 _: mpsc::UnboundedSender<Action>,
30 config: Arc<Config>,
31 theme: Arc<Theme>,
32 ) -> Result<()> {
33 self.state = TuiWidgetState::new();
34 self.config = config;
35 self.theme = theme;
36 Ok(())
37 }
38
39 fn render(&mut self, frame: &mut Frame<'_>, size: Rect) {
40 let widget = TuiLoggerWidget::default()
41 .block(self.theme.default_block().title("Log"))
42 .style_error(Style::default().fg(Color::Red))
43 .style_warn(Style::default().fg(Color::Yellow))
44 .style_info(Style::default().fg(Color::Cyan))
45 .style_debug(Style::default().fg(Color::Green))
46 .style_trace(Style::default().fg(Color::Magenta))
47 .state(&self.state);
48 frame.render_widget(widget, size)
49 }
50}