feat(form): show submission queue names

This commit is contained in:
2026-08-01 19:18:38 +07:00 Unverified
parent b557879928
commit 7cec08fb77
2 changed files with 33 additions and 10 deletions
+30 -3
View File
@@ -7,7 +7,7 @@ import { getSessionDiscordId } from "@/lib/auth";
import { getDiscordMemberProfile } from "@/lib/discord"; import { getDiscordMemberProfile } from "@/lib/discord";
import { db } from "@/db"; import { db } from "@/db";
import { submissions } from "@/db/schema"; import { submissions } from "@/db/schema";
import { desc, eq } from "drizzle-orm"; import { asc, eq } from "drizzle-orm";
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { isFormAcceptingSubmissions } from "@/lib/form-availability"; import { isFormAcceptingSubmissions } from "@/lib/form-availability";
@@ -44,7 +44,23 @@ export default async function AdminFormLayout(
}) })
.from(submissions) .from(submissions)
.where(eq(submissions.formId, params.id)) .where(eq(submissions.formId, params.id))
.orderBy(desc(submissions.submittedAt), desc(submissions.id)); .orderBy(asc(submissions.submittedAt), asc(submissions.id));
const responseDiscordIds = [
...new Set(
responseItems
.map((response) => response.userDiscordId)
.filter((value): value is string => Boolean(value))
),
];
const responseProfiles = Object.fromEntries(
await Promise.all(
responseDiscordIds.map(async (discordId) => [
discordId,
await getDiscordMemberProfile(discordId),
])
)
);
let profile = null; let profile = null;
const discordId = getSessionDiscordId(session); const discordId = getSessionDiscordId(session);
@@ -58,7 +74,18 @@ export default async function AdminFormLayout(
<FormAdminSidebar <FormAdminSidebar
formId={params.id} formId={params.id}
formTitle={form.title} formTitle={form.title}
responseItems={responseItems} responseItems={responseItems.map((response, index) => ({
id: response.id,
displayName:
(response.userDiscordId
? responseProfiles[response.userDiscordId]?.globalName ||
responseProfiles[response.userDiscordId]?.username
: null) ||
response.userName ||
response.userDiscordId ||
"Anonymous",
queueNumber: index + 1,
}))}
isOpen={isFormAcceptingSubmissions(form)} isOpen={isFormAcceptingSubmissions(form)}
userName={session?.user?.name || ""} userName={session?.user?.name || ""}
userImage={session?.user?.image || ""} userImage={session?.user?.image || ""}
+3 -7
View File
@@ -54,8 +54,8 @@ export function FormAdminSidebar({
profile?: DiscordMemberProfile | null; profile?: DiscordMemberProfile | null;
responseItems?: { responseItems?: {
id: string; id: string;
userName: string | null; displayName: string;
userDiscordId: string | null; queueNumber: number;
}[]; }[];
}) { }) {
const pathname = usePathname(); const pathname = usePathname();
@@ -175,10 +175,6 @@ export function FormAdminSidebar({
<SidebarMenuSub> <SidebarMenuSub>
{responseList.map((response) => { {responseList.map((response) => {
const responseHref = `/admin/form/${formId}/result/${response.id}`; const responseHref = `/admin/form/${formId}/result/${response.id}`;
const name =
response.userName ||
response.userDiscordId ||
"Anonymous";
return ( return (
<SidebarMenuSubItem key={response.id}> <SidebarMenuSubItem key={response.id}>
@@ -188,7 +184,7 @@ export function FormAdminSidebar({
> >
<GuardedLink href={responseHref}> <GuardedLink href={responseHref}>
<span className="min-w-0 truncate"> <span className="min-w-0 truncate">
{name} {response.queueNumber}. {response.displayName}
</span> </span>
</GuardedLink> </GuardedLink>
</SidebarMenuSubButton> </SidebarMenuSubButton>