fixes
This commit is contained in:
61
src/ui/chat_list.rs
Normal file
61
src/ui/chat_list.rs
Normal file
@@ -0,0 +1,61 @@
|
||||
use ratatui::{
|
||||
layout::{Constraint, Direction, Layout, Rect},
|
||||
style::{Color, Modifier, Style},
|
||||
widgets::{Block, Borders, List, ListItem, Paragraph},
|
||||
Frame,
|
||||
};
|
||||
use crate::app::App;
|
||||
|
||||
pub fn render(f: &mut Frame, area: Rect, app: &mut App) {
|
||||
let chat_chunks = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([
|
||||
Constraint::Length(3), // Search box
|
||||
Constraint::Min(0), // Chat list
|
||||
Constraint::Length(3), // User status
|
||||
])
|
||||
.split(area);
|
||||
|
||||
// Search box
|
||||
let search = Paragraph::new("🔍 Search...")
|
||||
.block(Block::default().borders(Borders::ALL))
|
||||
.style(Style::default().fg(Color::DarkGray));
|
||||
f.render_widget(search, chat_chunks[0]);
|
||||
|
||||
// Chat list
|
||||
let items: Vec<ListItem> = app
|
||||
.chats
|
||||
.iter()
|
||||
.map(|chat| {
|
||||
let is_selected = app.selected_chat_id == Some(chat.id);
|
||||
let prefix = if is_selected { "▌ " } else { " " };
|
||||
|
||||
let unread_badge = if chat.unread_count > 0 {
|
||||
format!(" ({})", chat.unread_count)
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
|
||||
let content = format!("{}{}{}", prefix, chat.title, unread_badge);
|
||||
let style = Style::default().fg(Color::White);
|
||||
|
||||
ListItem::new(content).style(style)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let chats_list = List::new(items)
|
||||
.block(Block::default().borders(Borders::ALL))
|
||||
.highlight_style(
|
||||
Style::default()
|
||||
.add_modifier(Modifier::ITALIC)
|
||||
.fg(Color::Yellow),
|
||||
);
|
||||
|
||||
f.render_stateful_widget(chats_list, chat_chunks[1], &mut app.chat_list_state);
|
||||
|
||||
// User status
|
||||
let status = Paragraph::new("[User: Online]")
|
||||
.block(Block::default().borders(Borders::ALL))
|
||||
.style(Style::default().fg(Color::Green));
|
||||
f.render_widget(status, chat_chunks[2]);
|
||||
}
|
||||
Reference in New Issue
Block a user