import React from 'react' export default function CategoryCard({ category }) { const name = category?.name ?? 'Untitled' const slug = category?.slug const categoryHref = slug ? `/forum/category/${slug}` : null const threads = category?.thread_count ?? 0 const posts = category?.post_count ?? 0 const lastActivity = category?.last_activity_at const preview = category?.preview_image ?? '/images/forum-default.jpg' const boards = category?.boards ?? [] const boardCount = boards.length const activeBoards = boards.filter((board) => Number(board?.topics_count ?? 0) > 0).length const latestBoard = boards .filter((board) => board?.latest_topic?.last_post_at) .sort((a, b) => new Date(b.latest_topic.last_post_at) - new Date(a.latest_topic.last_post_at))[0] const timeAgo = lastActivity ? formatTimeAgo(lastActivity) : null return (
{/* Image */}
{categoryHref ? ( {`${name}

{name}

{category?.description && (

{category.description}

)} {timeAgo && (

Last activity: {timeAgo}

)}
{number(posts)} posts {number(threads)} topics
View section
) : ( <> {`${name}

{name}

{category?.description && (

{category.description}

)} {timeAgo && (

Last activity: {timeAgo}

)}
{number(posts)} posts {number(threads)} topics
)}
Boards
{number(boardCount)}
Topics
{number(threads)}
Posts
{number(posts)}
{number(activeBoards)} active boards {latestBoard?.title ? Latest: {latestBoard.title} : No recent board activity}
) } function number(n) { return (n ?? 0).toLocaleString() } function formatTimeAgo(dateStr) { try { const date = new Date(dateStr) const now = new Date() const diff = Math.floor((now - date) / 1000) if (diff < 60) return 'just now' if (diff < 3600) return `${Math.floor(diff / 60)}m ago` if (diff < 86400) return `${Math.floor(diff / 3600)}h ago` if (diff < 604800) return `${Math.floor(diff / 86400)}d ago` return date.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' }) } catch { return null } }