import { getTranslations } from "next-intl/server"; import { StatusCard } from "@/components/admin/dashboard"; import { UnifiedTicketsTable } from "@/components/admin/unified-tickets-table"; import Link from "@/components/link"; import { requireModPermission } from "@/lib/admin/guard"; import { fetchUnifiedTicketInbox, type TicketInboxTypeFilter, } from "@/lib/admin/ticket-inbox"; import { fetchTicketQueueOpenCounts } from "@/lib/admin/ticket-queue-counts"; import { parseListParams } from "@/lib/admin-helpers"; import { PERMS } from "@/lib/permissions"; export default async function ModTicketInboxPage({ searchParams, }: { searchParams: Promise>; }) { await requireModPermission([PERMS.MOD_TICKETS_VIEW, PERMS.TICKETS_VIEW]); const t = await getTranslations("pages.admin.ticketInbox"); const raw = await searchParams; const parsed = parseListParams(new URLSearchParams(raw)); const typeRaw = raw.filter_type || "all"; const type: TicketInboxTypeFilter = typeRaw === "cms" || typeRaw === "help" ? typeRaw : "all"; const statusFilter = raw.filter_status || "open"; const openOnly = statusFilter !== "all"; const [inbox, queues] = await Promise.all([ fetchUnifiedTicketInbox({ page: parsed.page, perPage: parsed.perPage, search: parsed.search, type, openOnly, base: "mod", }), fetchTicketQueueOpenCounts(), ]); return (
{t("modNavLabel")} {t("modNavInbox")} {t("modNavDesk")} {t("modNavHelp")}

{t("hint")}

0 ? "warn" : "neutral"} icon="🛟" />
{inbox.total === 0 && !parsed.search ? (
{t("noTickets")}
) : ( )}
); }