import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { useLocation } from "wouter"; import type { Article, MediaOutlet } from "@shared/schema"; interface ArticleCardProps { article: Article; outlet: MediaOutlet; viewMode?: "grid" | "list"; } export default function ArticleCard({ article, outlet, viewMode = "grid" }: ArticleCardProps) { const [, setLocation] = useLocation(); const handleClick = () => { setLocation(`/articles/${article.slug}`); }; const formatPublishedTime = () => { if (article.publishedMinutesAgo) { return `${article.publishedMinutesAgo} min ago`; } // Fallback for articles without publishedMinutesAgo if (article.publishedAt) { const d = new Date(article.publishedAt); const now = new Date(); const diffMinutes = Math.floor((now.getTime() - d.getTime()) / (1000 * 60)); const clampedMinutes = Math.max(1, Math.min(diffMinutes, 59)); return `${clampedMinutes} min ago`; } return "1 min ago"; }; if (viewMode === "list") { return (
{article.isPinned && ( Pinned )} {article.isFeatured && ( Featured )}

{article.title}

{article.excerpt}

{formatPublishedTime()} {article.tags?.map((tag) => ( {tag} ))}
{article.imageUrl && ( {article.title} )}
); } return ( {article.imageUrl && ( {article.title} )}
{article.isPinned && ( Pinned )} {article.isFeatured && ( Featured )}

{article.title}

{article.excerpt}

{formatPublishedTime()}
{article.tags?.slice(0, 2).map((tag) => ( {tag} ))}
); }