kptui: Unread indicator, highlight vs selected state
This commit is contained in:
@@ -179,21 +179,32 @@ fn ui(frame: &mut Frame, app: &AppState, requested_view: ViewMode) {
|
||||
|
||||
fn render_conversations(frame: &mut Frame, app: &AppState, area: Rect, in_split: bool) {
|
||||
let title = if in_split {
|
||||
"Conversations (↑/↓, Enter)"
|
||||
"Conversations (↑/↓ move, ▸ cursor, ● unread)"
|
||||
} else {
|
||||
"Conversations (↑/↓, Enter to open)"
|
||||
"Conversations (↑/↓ move, Enter open, ● unread)"
|
||||
};
|
||||
|
||||
let items = app
|
||||
.conversations
|
||||
.iter()
|
||||
.map(|c| {
|
||||
let is_active = app.active_conversation_id.as_deref() == Some(c.id.as_str());
|
||||
let unread = if c.unread_count > 0 {
|
||||
format!(" ({})", c.unread_count)
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
let header = Line::from(vec![
|
||||
Span::styled(
|
||||
if c.unread_count > 0 { "● " } else { " " },
|
||||
Style::default()
|
||||
.fg(if c.unread_count > 0 {
|
||||
Color::LightYellow
|
||||
} else {
|
||||
Color::DarkGray
|
||||
})
|
||||
.add_modifier(Modifier::BOLD),
|
||||
),
|
||||
Span::styled(
|
||||
c.title.clone(),
|
||||
Style::default().add_modifier(Modifier::BOLD),
|
||||
@@ -202,9 +213,17 @@ fn render_conversations(frame: &mut Frame, app: &AppState, area: Rect, in_split:
|
||||
]);
|
||||
let preview = Line::from(Span::styled(
|
||||
c.preview.clone(),
|
||||
Style::default().fg(Color::DarkGray),
|
||||
Style::default().fg(if is_active {
|
||||
Color::Gray
|
||||
} else {
|
||||
Color::DarkGray
|
||||
}),
|
||||
));
|
||||
ListItem::new(vec![header, preview])
|
||||
ListItem::new(vec![header, preview]).style(if is_active {
|
||||
Style::default().bg(Color::DarkGray)
|
||||
} else {
|
||||
Style::default()
|
||||
})
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user