Translate analytics overview/activity/economy plus peak-hours/revenue charts, and audit/chat/commands/trades DataTables (en/nl/it). Includes prior events/polls detail i18n. Co-authored-by: Cursor <[email protected]>
61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import { useTranslations } from "next-intl";
|
|
import { DataTable } from "@/components/admin/data-table";
|
|
import { Badge } from "@/components/ui/badge";
|
|
import { formatTimestamp } from "@/lib/admin-helpers";
|
|
import type { DataTableColumn, PaginatedResult } from "@/types";
|
|
|
|
interface TradeLogRow {
|
|
id: number;
|
|
userOneName: string;
|
|
userTwoName: string;
|
|
status: string;
|
|
timestamp: number;
|
|
}
|
|
|
|
interface TradesTableProps {
|
|
data: PaginatedResult<TradeLogRow>;
|
|
}
|
|
|
|
export function TradesTable({ data }: TradesTableProps) {
|
|
const t = useTranslations("pages.admin.logs");
|
|
|
|
const columns: DataTableColumn<TradeLogRow>[] = [
|
|
{ key: "id", label: t("colId"), sortable: true },
|
|
{ key: "userOneName", label: t("trades.colUserOne") },
|
|
{ key: "userTwoName", label: t("trades.colUserTwo") },
|
|
{
|
|
key: "status",
|
|
label: t("trades.colStatus"),
|
|
sortable: true,
|
|
render: (value) => {
|
|
const v = String(value);
|
|
const variant =
|
|
v === "completed"
|
|
? "default"
|
|
: v === "cancelled"
|
|
? "destructive"
|
|
: "secondary";
|
|
return (
|
|
<Badge variant={variant}>{v || t("trades.statusUnknown")}</Badge>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
key: "timestamp",
|
|
label: t("colTime"),
|
|
sortable: true,
|
|
render: (value) => <span>{formatTimestamp(Number(value))}</span>,
|
|
},
|
|
];
|
|
|
|
return (
|
|
<DataTable
|
|
data={data}
|
|
columns={columns}
|
|
searchPlaceholder={t("trades.searchPlaceholder")}
|
|
/>
|
|
);
|
|
}
|