Files
erika/app/admin/form/[id]/result/page.tsx
T

55 lines
1.6 KiB
TypeScript

import { parseResultFilters, getFilteredSubmissions } from "@/lib/form/admin-form-results";
import { getDiscordMemberProfile } from "@/lib/discord/discord";
import { RealtimeRefresh } from "@/components/realtime-refresh";
import ResultsClient from "./client";
export const dynamic = "force-dynamic";
export default async function ResultsListPage({
params,
searchParams,
}: {
params: Promise<{ id: string }>;
searchParams: Promise<Record<string, string | string[] | undefined>>;
}) {
const [{ id }, rawFilters] = await Promise.all([params, searchParams]);
const initialFilters = parseResultFilters(rawFilters);
const { rows } = await getFilteredSubmissions(id, parseResultFilters({}), {
paginate: false,
});
const discordIds = [
...new Set(
rows
.map((row) => row.userDiscordId)
.filter((value): value is string => Boolean(value))
),
];
const profiles = Object.fromEntries(
await Promise.all(
discordIds.map(async (discordId) => [
discordId,
await getDiscordMemberProfile(discordId),
])
)
);
return (
<>
<RealtimeRefresh topic="submissions" formId={id} />
<ResultsClient
formId={id}
initialFilters={initialFilters}
rows={rows.map((row) => ({
id: row.id,
userName: row.userName,
userDiscordId: row.userDiscordId,
submittedAt: row.submittedAt.toISOString(),
adminNote: row.adminNote,
editHistory: Array.isArray(row.editHistory) ? row.editHistory : [],
}))}
profiles={profiles}
/>
</>
);
}