"use client" import { useMemo, useState } from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { Plus, Megaphone } from "lucide-react" import { useTranslations } from "next-intl" import { Button } from "@/shared/components/ui/button" import { EmptyState } from "@/shared/components/ui/empty-state" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/shared/components/ui/select" import { AnnouncementCard } from "./announcement-card" import type { Announcement, AnnouncementStatus } from "../types" type Filter = "all" | AnnouncementStatus export function AnnouncementList({ announcements, canManage, createHref, detailHrefBuilder, initialStatus, }: { announcements: Announcement[] canManage?: boolean createHref?: string detailHrefBuilder?: (id: string) => string initialStatus?: Filter }) { const t = useTranslations("announcements") const router = useRouter() const [filter, setFilter] = useState(initialStatus ?? "all") const filterOptions: { value: Filter; label: string }[] = [ { value: "all", label: t("filter.all") }, { value: "published", label: t("filter.published") }, { value: "draft", label: t("filter.draft") }, { value: "archived", label: t("filter.archived") }, ] const filtered = useMemo(() => { if (filter === "all") return announcements return announcements.filter((a) => a.status === filter) }, [announcements, filter]) const handleFilterChange = (value: string) => { setFilter(value as Filter) const params = new URLSearchParams() if (value !== "all") params.set("status", value) const qs = params.toString() router.replace(qs ? `?${qs}` : "?") } return (
{canManage && createHref ? ( ) : null}
{filtered.length === 0 ? ( ) : (
{filtered.map((a) => ( ))}
)}
) }