diff --git a/src/app/(admin)/admin/awards/[id]/page.tsx b/src/app/(admin)/admin/awards/[id]/page.tsx
index 00cf794..592b4d4 100644
--- a/src/app/(admin)/admin/awards/[id]/page.tsx
+++ b/src/app/(admin)/admin/awards/[id]/page.tsx
@@ -55,6 +55,8 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
import { Input } from '@/components/ui/input'
import { Progress } from '@/components/ui/progress'
import { UserAvatar } from '@/components/shared/user-avatar'
+import { BulkInviteForm } from '@/components/shared/bulk-invite-form'
+import { Separator } from '@/components/ui/separator'
import { AnimatedCard } from '@/components/shared/animated-container'
import { Pagination } from '@/components/shared/pagination'
import { EmailPreviewDialog } from '@/components/admin/round/email-preview-dialog'
@@ -403,7 +405,7 @@ export default function AwardDetailPage({
// Deferred queries - only load when needed
const { data: allUsers } = trpc.user.list.useQuery(
- { role: 'JURY_MEMBER', page: 1, perPage: 100 },
+ { page: 1, perPage: 200 },
{ enabled: activeTab === 'jurors' }
)
const { data: allProjects } = trpc.project.list.useQuery(
@@ -484,6 +486,13 @@ export default function AwardDetailPage({
},
onError: () => toast.error('Failed to update chair status'),
})
+ const bulkInvite = trpc.specialAward.bulkInviteJurors.useMutation({
+ onSuccess: (data) => {
+ utils.specialAward.listJurors.invalidate({ awardId })
+ toast.success(`${data.created} invited, ${data.existing} already existed${data.errors > 0 ? `, ${data.errors} failed` : ''}`)
+ },
+ onError: (err) => toast.error(err.message),
+ })
const setWinner = trpc.specialAward.setWinner.useMutation({
onSuccess: invalidateAward,
})
@@ -1328,6 +1337,25 @@ export default function AwardDetailPage({
+
+ Invite new users who don't have accounts yet. They'll receive an invitation email and be added as jurors for this award. +
+