use ratatui::{
Frame,
layout::Rect,
style::{Modifier, Style},
text::{Line, Span},
widgets::{Paragraph, Wrap},
};
use crate::jira::adf::json_to_text;
use crate::jira::types::Issue;
use crate::tui::app::AppState;
use crate::tui::markdown::markdown_to_lines;
pub fn render_comments(f: &mut Frame, area: Rect, issue: &Issue, app: &AppState) -> usize {
let mut lines: Vec<Line> = Vec::new();
lines.push(Line::from(vec![
Span::styled(&issue.key, Style::default().add_modifier(Modifier::BOLD)),
Span::raw(" — Comments"),
]));
lines.push(Line::from(""));
match &issue.fields.comment {
Some(comment_list) if !comment_list.comments.is_empty() => {
for comment in &comment_list.comments {
let author = comment.author.display();
let date = &comment.created[..10]; lines.push(Line::from(Span::styled(
format!("{author} · {date}"),
Style::default().add_modifier(Modifier::BOLD),
)));
for mut line in markdown_to_lines(&json_to_text(&comment.body)) {
line.spans.insert(0, Span::raw(" "));
lines.push(line);
}
lines.push(Line::from(""));
}
}
_ => {
lines.push(Line::from(Span::styled(
"(no comments)",
Style::default().add_modifier(Modifier::DIM),
)));
}
}
let total = lines.len();
let scroll = u16::try_from(app.detail_scroll).unwrap_or(u16::MAX);
f.render_widget(
Paragraph::new(lines)
.wrap(Wrap { trim: false })
.scroll((scroll, 0)),
area,
);
total
}