tabiew 0.13.1

A lightweight TUI application to view and query tabular data files, such as CSV, TSV, and parquet.
use crossterm::event::{KeyCode, KeyModifiers};
use polars::frame::DataFrame;
use ratatui::layout::Margin;

use crate::{
    handler::message::Message,
    misc::sql::TableInfo,
    tui::{component::Component, schema::data_frame_info},
};

#[derive(Debug)]
pub struct DataFrameInfo {
    data_frame_info: data_frame_info::DataFrameInfo,
}

impl DataFrameInfo {
    pub fn new(df: &DataFrame, input: crate::misc::sql::TableSource) -> Self {
        Self {
            data_frame_info: data_frame_info::DataFrameInfo::new(TableInfo::new(input, df)),
        }
    }
}

impl Component for DataFrameInfo {
    fn render(
        &mut self,
        _area: ratatui::prelude::Rect,
        buf: &mut ratatui::prelude::Buffer,
        focus_state: crate::tui::component::FocusState,
    ) {
        let area = buf.area.inner(Margin::new(7, 3));
        self.data_frame_info.render(area, buf, focus_state);
    }

    fn handle(&mut self, event: crossterm::event::KeyEvent) -> bool {
        self.data_frame_info.handle(event) || {
            match (event.code, event.modifiers) {
                (KeyCode::Enter, KeyModifiers::NONE) => true,
                (KeyCode::Esc, KeyModifiers::NONE)
                | (KeyCode::Char('q'), KeyModifiers::NONE)
                | (KeyCode::Char('i'), KeyModifiers::NONE) => {
                    Message::PaneDismissModal.enqueue();
                    true
                }
                _ => false,
            }
        }
    }
}