use egui::{Color32, RichText, Ui};
use crate::state::workspace::DatabasePaneState;
use crate::ui::progress;
pub fn render_file_panel(ui: &mut Ui, title: &str, pane: &mut DatabasePaneState) -> bool {
let mut selected_changed = false;
ui.heading(title);
if let Some(path) = &pane.path {
ui.label(path.display().to_string());
} else {
ui.label(RichText::new("No database loaded").italics());
}
if let Some(error) = &pane.error {
ui.colored_label(Color32::RED, error);
}
if let Some(progress_state) = &pane.progress {
progress::render_progress(ui, progress_state);
}
if let Some(summary) = &pane.summary {
ui.separator();
ui.label(format!(
"{} tables, {} views",
summary.tables.len(),
summary.views.len()
));
ui.separator();
ui.label(RichText::new("Tables").strong());
for table in &summary.tables {
let is_selected = pane.selected_table.as_deref() == Some(table.name.as_str());
if ui
.selectable_label(is_selected, format!("{} ({})", table.name, table.row_count))
.clicked()
{
pane.selected_table = Some(table.name.clone());
pane.table_query.page = 0;
selected_changed = true;
}
}
if !summary.views.is_empty() {
ui.separator();
ui.label(RichText::new("Views").strong());
for view in &summary.views {
ui.label(&view.name);
}
}
}
selected_changed
}