55 lines
1.6 KiB
TypeScript
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}
|
|
/>
|
|
</>
|
|
);
|
|
}
|