use crate::api; use crate::api::ArticleView; use crate::components::badge::{Badge, BadgeVariant}; use crate::components::button::{Button, ButtonSize, ButtonVariant}; use dioxus::prelude::*; #[component] pub fn ArticleRow(article: ArticleView) -> Element { let score_pct = article.final_score.map(|s| (s * 100.0).round() as i32); rsx! { li { class: "article-row", div { class: "article-row-header", a { href: "{article.url}", target: "_blank", "{article.title}" } if let Some(pct) = score_pct { Badge { variant: BadgeVariant::Secondary, "{pct}%" } } } if !article.summary.trim().is_empty() { p { class: "summary", "{article.summary}" } } if !article.topics.is_empty() { div { class: "topics", for topic in article.topics.iter() { Badge { variant: BadgeVariant::Outline, "{topic}" } } } } Button { variant: ButtonVariant::Outline, size: ButtonSize::Sm, onclick: move |_| { let id = article.id.clone(); async move { let _ = api::articles::mark_dismissed(id).await; } }, "Not relevant" } } } }