import { db } from "@/db"; import { notFound } from "next/navigation"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { ArrowLeft, ArrowRight } from "lucide-react"; import SubmissionDetailClient from "./client"; import { DeleteSubmissionButton } from "@/components/delete-buttons"; import { RealtimeRefresh } from "@/components/realtime-refresh"; import { getDiscordMemberProfile } from "@/lib/discord/discord"; interface SubmissionDetailPageProps { params: Promise<{ id: string; submissionId: string; }>; searchParams: Promise<{ return?: string | string[] }>; } export default async function SubmissionDetailPage({ params, searchParams, }: SubmissionDetailPageProps) { const [{ id: formId, submissionId }, query] = await Promise.all([ params, searchParams, ]); const returnValue = Array.isArray(query.return) ? query.return[0] : query.return; const returnQuery = returnValue?.slice(0, 1000) || ""; const backHref = `/admin/form/${formId}/result${returnQuery ? `?${returnQuery}` : ""}`; const detailHref = (id: string) => `/admin/form/${formId}/result/${id}${returnQuery ? `?return=${encodeURIComponent(returnQuery)}` : ""}`; const submission = await db.query.submissions.findFirst({ where: (s, { eq, and }) => and(eq(s.id, submissionId), eq(s.formId, formId)), }); if (!submission) { notFound(); } const respondentProfile = submission.userDiscordId ? await getDiscordMemberProfile(submission.userDiscordId) : null; const questions = await db.query.questions.findMany({ where: (q, { eq }) => eq(q.formId, submission.formId), orderBy: (q, { asc }) => [asc(q.displayOrder)], }); const answersList = await db.query.answers.findMany({ where: (a, { eq }) => eq(a.submissionId, submission.id), }); const answersMap: Record = {}; for (const ans of answersList) { answersMap[ans.questionId] = { value: ans.value, imageCdnId: ans.imageCdnId ?? null, }; } const submissionsList = await db.query.submissions.findMany({ where: (s, { eq }) => eq(s.formId, formId), orderBy: (s, { desc }) => [desc(s.submittedAt)], }); const currentIndex = submissionsList.findIndex((s) => s.id === submissionId); const prevId = currentIndex > 0 ? submissionsList[currentIndex - 1].id : null; const nextId = currentIndex >= 0 && currentIndex < submissionsList.length - 1 ? submissionsList[currentIndex + 1].id : null; return (
{prevId ? ( ) : (
)} {nextId && ( )}
); }