45 lines
1.3 KiB
Rust
45 lines
1.3 KiB
Rust
mod loading;
|
|
mod auth;
|
|
mod main_screen;
|
|
mod chat_list;
|
|
mod messages;
|
|
mod footer;
|
|
|
|
use ratatui::Frame;
|
|
use ratatui::layout::Alignment;
|
|
use ratatui::style::{Color, Modifier, Style};
|
|
use ratatui::widgets::Paragraph;
|
|
use crate::app::{App, AppScreen};
|
|
|
|
/// Минимальная высота терминала
|
|
const MIN_HEIGHT: u16 = 10;
|
|
/// Минимальная ширина терминала
|
|
const MIN_WIDTH: u16 = 40;
|
|
|
|
pub fn render(f: &mut Frame, app: &mut App) {
|
|
let area = f.area();
|
|
|
|
// Проверяем минимальный размер терминала
|
|
if area.width < MIN_WIDTH || area.height < MIN_HEIGHT {
|
|
render_size_warning(f, area.width, area.height);
|
|
return;
|
|
}
|
|
|
|
match app.screen {
|
|
AppScreen::Loading => loading::render(f, app),
|
|
AppScreen::Auth => auth::render(f, app),
|
|
AppScreen::Main => main_screen::render(f, app),
|
|
}
|
|
}
|
|
|
|
fn render_size_warning(f: &mut Frame, width: u16, height: u16) {
|
|
let message = format!(
|
|
"{}x{}\nМинимум: {}x{}",
|
|
width, height, MIN_WIDTH, MIN_HEIGHT
|
|
);
|
|
let warning = Paragraph::new(message)
|
|
.style(Style::default().fg(Color::Yellow).add_modifier(Modifier::BOLD))
|
|
.alignment(Alignment::Center);
|
|
f.render_widget(warning, f.area());
|
|
}
|