use ratatui::style::{Modifier, Style};
use ratatui::text::{Span, Spans};
use ratatui::widgets::Paragraph;
use std::time::Instant;
#[derive(Debug)]
pub(crate) struct Spinner {
start: Instant,
}
impl Spinner {
pub(crate) fn new() -> Self {
Spinner {
start: Instant::now(),
}
}
pub(crate) fn display<'a>(&'a self) -> Paragraph<'a> {
let spinner = match self.start.elapsed().as_millis() % 1000 {
0..=249 => "-",
250..=499 => "/",
500..=749 => "|",
750..=999 => "\\",
_ => unreachable!(),
};
let text = Spans::from(vec![
Span::styled(spinner, Style::default().add_modifier(Modifier::DIM)),
Span::raw(" "),
Span::styled(
"waiting for remaining results...",
Style::default().add_modifier(Modifier::DIM | Modifier::ITALIC),
),
Span::raw(" "),
Span::styled(spinner, Style::default().add_modifier(Modifier::DIM)),
]);
Paragraph::new(text)
.alignment(ratatui::layout::Alignment::Center)
.wrap(ratatui::widgets::Wrap { trim: true })
}
}