Skip to main content

gitv_tui/ui/components/toast/
widget.rs

1use ratatui::{
2    style::Style,
3    symbols::{self},
4    widgets::{Block, Borders, Padding, Paragraph, Widget, WidgetRef},
5};
6
7use crate::ui::components::toast::ToastType;
8
9#[derive(Debug, Clone)]
10pub struct Toast {
11    pub message: String,
12    pub type_: ToastType,
13}
14
15impl Toast {
16    pub fn new(message: &str, type_: ToastType) -> Self {
17        Self {
18            message: message.to_string(),
19            type_,
20        }
21    }
22}
23
24impl WidgetRef for Toast {
25    fn render_ref(&self, area: ratatui::layout::Rect, buf: &mut ratatui::buffer::Buffer) {
26        const PADDING: u16 = 1;
27        let paragraph = Paragraph::new(self.message.as_str()).block(
28            Block::default()
29                .borders(Borders::LEFT | Borders::RIGHT)
30                .border_set(symbols::border::QUADRANT_OUTSIDE)
31                .padding(Padding::uniform(PADDING))
32                .border_style(Style::default().fg(self.type_.into())),
33        );
34        paragraph.render(area, buf);
35    }
36}