tabiew 0.13.1

A lightweight TUI application to view and query tabular data files, such as CSV, TSV, and parquet.
use ratatui::layout::{Constraint, Layout};

use crate::{
    misc::sql::TableInfo,
    tui::{
        component::Component,
        schema::{
            data_frame_field_info::DataFrameFieldInfo, data_frame_meta_info::DataFrameMetaInfo,
        },
    },
};

#[derive(Debug)]
pub struct DataFrameInfo {
    meta_info: DataFrameMetaInfo,
    field_info: DataFrameFieldInfo,
}

impl DataFrameInfo {
    pub fn new(table_info: TableInfo) -> Self {
        Self {
            field_info: DataFrameFieldInfo::new(table_info.schema().clone()),
            meta_info: DataFrameMetaInfo::new(table_info),
        }
    }

    pub fn table_info(&self) -> &TableInfo {
        self.meta_info.table_info()
    }
}

impl Component for DataFrameInfo {
    fn render(
        &mut self,
        area: ratatui::prelude::Rect,
        buf: &mut ratatui::prelude::Buffer,
        focus_state: crate::tui::component::FocusState,
    ) {
        let [area2, area3] =
            Layout::vertical([Constraint::Length(6), Constraint::Fill(1)]).areas(area);
        self.meta_info.render(area2, buf, focus_state);
        self.field_info.render(area3, buf, focus_state);
    }

    fn handle(&mut self, event: crossterm::event::KeyEvent) -> bool {
        self.field_info.handle(event)
    }
}