"use client"; import { useTranslations } from "next-intl"; import { DataTable } from "@/components/admin/data-table"; import Link from "@/components/link"; import { Badge } from "@/components/ui/badge"; import type { DataTableColumn, PaginatedResult } from "@/types/common"; export interface CfhRow { id: number; issue: string; roomId: number; when: string; sender: string; senderId: number; reported: string; reportedId: number; mod: string; state: number; stateLabel: string; } export function CfhTable({ data, basePath = "/admin/moderation/cfh", userLinkMode = "admin", }: { data: PaginatedResult; /** Detail URL prefix (no trailing slash). */ basePath?: string; /** Admin user show vs public profile. */ userLinkMode?: "admin" | "public"; }) { const t = useTranslations("pages.admin.cfh"); function userHref(id: number, username: string) { if (userLinkMode === "public" && username && username !== "—") { return `/u/${encodeURIComponent(username)}`; } return `/admin/users/${id}`; } const columns: DataTableColumn[] = [ { key: "id", label: t("colId"), sortable: true }, { key: "issue", label: t("colIssue"), sortable: true, render: (_value, row) => (
{row.issue || t("noDescription")}

{t("roomMeta", { room: row.roomId, when: row.when })}

), }, { key: "sender", label: t("colSender"), sortable: true, render: (_value, row) => row.senderId ? ( {row.sender} ) : ( "—" ), }, { key: "reported", label: t("colReported"), sortable: true, render: (_value, row) => row.reportedId ? ( {row.reported} ) : ( "—" ), }, { key: "mod", label: t("colMod"), sortable: true }, { key: "state", label: t("colStatus"), sortable: true, filterKey: "filter_state", filterOptions: [ { label: t("stateOpen"), value: "0" }, { label: t("statePicked"), value: "1" }, { label: t("stateClosed"), value: "2" }, ], render: (_value, row) => { const variant = row.state === 0 ? "destructive" : row.state === 1 ? "default" : "secondary"; return ( {row.stateLabel} ); }, }, ]; return ( ); }