use ratatui::{
layout::{Constraint, Direction, Layout, Rect},
style::{Color, Modifier, Style},
text::{Line, Span},
widgets::{Block, Borders, Paragraph, Wrap},
Frame,
};
pub struct MigrationDetailView {
}
impl MigrationDetailView {
pub fn new() -> Self {
Self {}
}
pub fn render(&mut self, f: &mut Frame, area: Rect, version: i64) {
let chunks = Layout::default()
.direction(Direction::Vertical)
.constraints([
Constraint::Length(3), Constraint::Min(10), Constraint::Length(4), ])
.split(area);
let header = Paragraph::new(vec![
Line::from(vec![
Span::raw("Migration "),
Span::styled(
format!("v{}", version),
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD),
),
]),
])
.block(Block::default().borders(Borders::ALL).title("Details"));
f.render_widget(header, chunks[0]);
let content = vec![
Line::from(vec![
Span::raw("No migration content available"),
]),
Line::from(""),
Line::from(vec![
Span::raw("Connect to a database to view migration details"),
Span::styled(" (/connect)", Style::default().fg(Color::DarkGray)),
]),
];
let content_widget = Paragraph::new(content)
.block(Block::default().borders(Borders::ALL).title("Migration SQL"))
.wrap(Wrap { trim: true });
f.render_widget(content_widget, chunks[1]);
let actions = vec![
Line::from(vec![
Span::styled("r ", Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)),
Span::raw("Run this migration "),
Span::styled("b ", Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)),
Span::raw("Rollback to before this "),
Span::styled("ESC/q ", Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)),
Span::raw("Back to list"),
]),
];
let actions_widget = Paragraph::new(actions)
.block(Block::default().borders(Borders::ALL).title("Actions"));
f.render_widget(actions_widget, chunks[2]);
}
}