use ratatui::{
Frame,
layout::{Constraint, Direction, Layout, Rect},
text::Line,
widgets::{Block, Borders, Clear, Paragraph},
};
const SPINNER: &[&str] = &["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
pub fn render_await(f: &mut Frame, description: &str, tick: u64) {
let frame = usize::try_from(tick).unwrap_or(0) % SPINNER.len();
let spinner = SPINNER[frame];
let area = centered_rect(50, 20, f.area());
f.render_widget(Clear, area);
let block = Block::default().borders(Borders::ALL);
let inner = block.inner(area);
f.render_widget(block, area);
f.render_widget(
Paragraph::new(Line::from(format!("{spinner} {description}"))),
inner,
);
}
fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect {
let popup_layout = Layout::default()
.direction(Direction::Vertical)
.constraints([
Constraint::Percentage((100 - percent_y) / 2),
Constraint::Percentage(percent_y),
Constraint::Percentage((100 - percent_y) / 2),
])
.split(r);
Layout::default()
.direction(Direction::Horizontal)
.constraints([
Constraint::Percentage((100 - percent_x) / 2),
Constraint::Percentage(percent_x),
Constraint::Percentage((100 - percent_x) / 2),
])
.split(popup_layout[1])[1]
}