import { notFound, redirect } from "next/navigation"; import { AdminBreadcrumb } from "@/components/admin/admin-breadcrumb"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; import { PollForm } from "../poll-form"; import { PollQuestionsManager } from "./poll-questions"; import { PollResultsView } from "./poll-results"; export default async function PollDetailPage({ params, }: { params: Promise<{ locale: string; id: string }>; }) { const { id } = await params; const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.POLLS_EDIT, session.user.rank)) { redirect("/admin/polls"); } const pollId = parseInt(id, 10); if (Number.isNaN(pollId)) notFound(); const poll = await prisma.websitePoll.findUnique({ where: { id: pollId }, include: { questions: { orderBy: { sortOrder: "asc" }, include: { votes: true, }, }, }, }); if (!poll) notFound(); const totalVoters = new Set(poll.questions.flatMap((q) => q.votes.map((v) => v.userId))).size; return (

{poll.title}

{poll.status}
{poll.description &&

{poll.description}

}
{/* Stats */}
Total Voters
{totalVoters}
Questions
{poll.questions.length}
Total Votes
{poll.questions.reduce((sum, q) => sum + q.votes.length, 0)}
{/* Edit form */} {/* Questions */} ({ id: q.id, question: q.question, type: q.type, sortOrder: q.sortOrder, options: q.options, }))} /> {/* Results */} {poll.questions.length > 0 && ( ({ id: q.id, question: q.question, options: q.options, votes: q.votes.map((v) => v.answer), }))} /> )}
); }