use ratatui::buffer::Buffer;
use ratatui::layout::{Constraint, Direction, Layout, Rect};
use ratatui::style::{Color, Modifier, Style};
use ratatui::text::Line;
use ratatui::widgets::{Clear, Paragraph, Widget};
use super::PaletteRenderer;
use super::parts::{render_footer, render_query, render_rows};
use crate::view::PaletteView;
#[derive(Clone, Debug)]
pub struct FlatOverlayRenderer {
title: String,
}
impl Default for FlatOverlayRenderer {
fn default() -> Self {
Self::new()
}
}
impl FlatOverlayRenderer {
pub fn new() -> Self {
Self {
title: "Actions".into(),
}
}
pub fn title(mut self, title: impl Into<String>) -> Self {
self.title = title.into();
self
}
}
impl PaletteRenderer for FlatOverlayRenderer {
fn render(&self, area: Rect, buf: &mut Buffer, view: &PaletteView) {
Clear.render(area, buf);
if area.height == 0 || area.width == 0 {
return;
}
let sections = Layout::default()
.direction(Direction::Vertical)
.constraints([
Constraint::Length(1),
Constraint::Length(1),
Constraint::Min(0),
Constraint::Length(1),
])
.split(area);
Paragraph::new(Line::from(self.title.as_str()))
.style(Style::new().fg(Color::Cyan).add_modifier(Modifier::BOLD))
.render(sections[0], buf);
render_query(sections[1], buf, view);
render_rows(sections[2], buf, view);
render_footer(sections[3], buf, view);
}
}