import { createDefaultForm } from "@/app/admin/form/actions"; import { AdminShellServer } from "@/components/admin-shell-server"; import { RealtimeRefresh } from "@/components/realtime-refresh"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { getAdminDashboardData } from "@/lib/admin/admin-dashboard"; import { ClipboardList, FilePlus2, Inbox, ListChecks, Server, } from "lucide-react"; import Link from "next/link"; export const dynamic = "force-dynamic"; function formatNumber(value: number) { return new Intl.NumberFormat("en-US").format(value); } function formatDate(date: Date | null) { if (!date) return "No responses"; return date.toLocaleString("en-GB", { timeZone: "Asia/Bangkok", hour12: false, }); } function respondentName(submission: { userName: string | null; userDiscordId: string | null; }) { return submission.userName || submission.userDiscordId || "Anonymous"; } function StatCard({ title, value, description, icon: Icon, }: { title: string; value: number; description: string; icon: typeof ClipboardList; }) { return (
{title} {formatNumber(value)}

{description}

); } export default async function AdminPage() { const { summary, recentSubmissions, activeForms } = await getAdminDashboardData(); return (

Dashboard

Forms, responses, and activity at a glance.

Recent responses Latest submissions across all forms.
{recentSubmissions.length === 0 ? (
Responses will appear here after people submit a form.
) : ( <>
Respondent Form Submitted Status {recentSubmissions.map((submission) => ( {respondentName(submission)} {submission.userName && submission.userDiscordId && (

{submission.userDiscordId}

)}
{submission.formTitle} {formatDate(submission.submittedAt)} {submission.edited ? "Edited" : "Original"}
))}
{recentSubmissions.map((submission) => (
{respondentName(submission)} {submission.formTitle}
{submission.edited ? "Edited" : "Original"}
{formatDate(submission.submittedAt)}
))}
)}
Forms Manage forms and view submissions
Backend Follower API settings and cache
Form activity Forms ranked by responses in the last 7 days. {activeForms.length === 0 ? (

No forms found. Create one to start collecting responses.

) : ( <>
Form Status Today Last 7 days Total Last response Actions {activeForms.map((form) => ( {form.title} {form.isOpen ? "Open" : "Closed"} {formatNumber(form.responsesToday)} {formatNumber(form.responsesLast7Days)} {formatNumber(form.totalResponses)} {formatDate(form.lastResponseAt)} ))}
{activeForms.map((form) => (
{form.title} Last response: {formatDate(form.lastResponseAt)}
{form.isOpen ? "Open" : "Closed"}
{formatNumber(form.responsesLast7Days)} this week ยท{" "} {formatNumber(form.totalResponses)} total
))}
)}
); }