Skip to content

Commit

Permalink
feat(term): change feed meta widget from list to table
Browse files Browse the repository at this point in the history
  • Loading branch information
ymgyt committed Mar 18, 2024
1 parent 099c852 commit f583e2f
Showing 1 changed file with 41 additions and 37 deletions.
78 changes: 41 additions & 37 deletions crates/synd_term/src/ui/components/subscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ use std::borrow::Cow;
use itertools::Itertools;
use ratatui::{
prelude::{Alignment, Buffer, Constraint, Layout, Margin, Rect},
style::{Modifier, Style, Stylize},
style::{Modifier, Style},
text::{Line, Span},
widgets::{
block::{Position, Title},
Block, BorderType, Borders, Cell, HighlightSpacing, Padding, Paragraph, Row, Scrollbar,
Block, BorderType, Borders, Cell, HighlightSpacing, Padding, Row, Scrollbar,
ScrollbarOrientation, ScrollbarState, StatefulWidget, Table, TableState, Widget,
},
};
Expand Down Expand Up @@ -202,7 +202,7 @@ impl Subscription {
.padding(Padding {
left: 3,
right: 3,
top: 0,
top: 1,
bottom: 0,
})
.title(
Expand All @@ -220,23 +220,47 @@ impl Subscription {
return;
};

let vertical = Layout::vertical([Constraint::Length(4), Constraint::Min(0)]);
let vertical = Layout::vertical([Constraint::Length(2), Constraint::Min(0)]);
let [meta_area, entries_area] = vertical.areas(inner);
let entries_area = entries_area.inner(&Margin {
vertical: 1,
horizontal: 0,
});

let meta = {
let meta = vec![
Line::from(vec![
let widths = [
Constraint::Length(10),
Constraint::Fill(1),
Constraint::Fill(2),
];

let meta_rows = vec![
Row::new([
Cell::new(Span::styled(
"󰚼 Authors",
Style::default().add_modifier(Modifier::BOLD),
)),
Cell::new(Span::from(if feed.authors.is_empty() {
Cow::Borrowed(ui::UNKNOWN_SYMBOL)
} else {
Cow::Owned(feed.authors.iter().join(", "))
})),
Cell::new(Line::from(vec![
Span::styled(
"󰗀 Feed Src ",
Style::default().add_modifier(Modifier::BOLD),
),
Span::from(feed.url.as_str()),
]),
Line::from(vec![
])),
]),
Row::new([
Cell::new(Span::styled(
" Generator",
Style::default().add_modifier(Modifier::BOLD),
)),
Cell::new(Span::from(
feed.generator.as_deref().unwrap_or(ui::UNKNOWN_SYMBOL),
)),
Cell::new(Line::from(vec![
Span::styled(
"󰈙 Feed type ",
Style::default().add_modifier(Modifier::BOLD),
Expand All @@ -249,29 +273,14 @@ impl Subscription {
Some(FeedType::JSON) => "JSON Feed",
None => ui::UNKNOWN_SYMBOL,
}),
]),
Line::from(vec![
Span::styled(
"󰚼 Authors ",
Style::default().add_modifier(Modifier::BOLD),
),
Span::from(if feed.authors.is_empty() {
Cow::Borrowed(ui::UNKNOWN_SYMBOL)
} else {
Cow::Owned(feed.authors.iter().join(", "))
}),
]),
Line::from(vec![
Span::styled(
" Generator ",
Style::default().add_modifier(Modifier::BOLD),
),
Span::from(feed.generator.as_deref().unwrap_or(ui::UNKNOWN_SYMBOL)),
]),
];
Paragraph::new(meta)
};
Widget::render(meta, meta_area, buf);
])),
]),
];

let table = Table::new(meta_rows, widths)
.column_spacing(2)
.style(cx.theme.subscription.background);
Widget::render(table, meta_area, buf);

let entry = |entry: &EntryMeta| {
let title = entry.title.as_deref().unwrap_or(ui::UNKNOWN_SYMBOL);
Expand All @@ -295,11 +304,6 @@ impl Subscription {
Cell::new(Span::from("󱙓 Summary")),
]);

let widths = [
Constraint::Length(10),
Constraint::Fill(1),
Constraint::Fill(2),
];
let rows = feed.entries.iter().map(entry);
let table = Table::new(rows, widths)
.header(header.style(cx.theme.subscription.header))
Expand Down

0 comments on commit f583e2f

Please sign in to comment.