"use client"; import { Bell, ExternalLink, Info, type LucideIcon, Rocket, Wrench, Zap } from "lucide-react"; import Link from "next/link"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import type { AnnouncementCategory } from "@/contracts/types/announcement.types"; import type { AnnouncementWithState } from "@/hooks/use-announcements"; import { formatRelativeDate } from "@/lib/format-date"; const categoryConfig: Record< AnnouncementCategory, { label: string; icon: LucideIcon; color: string; badgeVariant: "default" | "secondary" | "destructive" | "outline"; } > = { feature: { label: "Feature", icon: Rocket, color: "text-emerald-500", badgeVariant: "default", }, update: { label: "Update", icon: Zap, color: "text-blue-500", badgeVariant: "secondary", }, maintenance: { label: "Maintenance", icon: Wrench, color: "text-amber-500", badgeVariant: "outline", }, info: { label: "Info", icon: Info, color: "text-muted-foreground", badgeVariant: "secondary", }, }; export function AnnouncementCard({ announcement }: { announcement: AnnouncementWithState }) { const config = categoryConfig[announcement.category] ?? categoryConfig.info; const Icon = config.icon; return (
{announcement.title} {config.label} {announcement.isImportant && ( Important )}
{formatRelativeDate(announcement.date)}

{announcement.description}

{announcement.link && ( )}
); }