'use client' import { useState } from 'react' import { Scale, CheckCircle2, Loader2 } from 'lucide-react' import { toast } from 'sonner' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Slider } from '@/components/ui/slider' /** * Shows a blocking banner when a juror has jury group memberships * with unconfirmed preferences (selfServiceCap is null) linked to * active rounds. The juror must confirm before proceeding. */ export function JuryPreferencesBanner() { const { data: ctx, isLoading } = trpc.user.getOnboardingContext.useQuery() const utils = trpc.useUtils() const unconfirmed = (ctx?.memberships ?? []).filter( (m) => m.selfServiceCap === null, ) const [prefs, setPrefs] = useState>(new Map()) const [confirming, setConfirming] = useState(false) const updatePref = (id: string, field: 'cap' | 'ratio', value: number) => { setPrefs((prev) => { const next = new Map(prev) const existing = next.get(id) ?? { cap: 15, ratio: 0.5 } next.set(id, { ...existing, [field]: value }) return next }) } const confirmMutation = trpc.user.updateJuryPreferences.useMutation({ onSuccess: () => { toast.success('Preferences confirmed') utils.user.getOnboardingContext.invalidate() setConfirming(false) }, onError: (err) => { toast.error(err.message) setConfirming(false) }, }) const handleConfirm = () => { setConfirming(true) const preferences = unconfirmed.map((m) => { const pref = prefs.get(m.juryGroupMemberId) return { juryGroupMemberId: m.juryGroupMemberId, selfServiceCap: pref?.cap ?? m.currentCap, selfServiceRatio: pref?.ratio ?? m.preferredStartupRatio ?? 0.5, } }) confirmMutation.mutate({ preferences }) } if (isLoading || unconfirmed.length === 0) return null return (
Confirm Your Evaluation Preferences
Please review and confirm your assignment preferences before evaluations begin.
{unconfirmed.map((m) => { const pref = prefs.get(m.juryGroupMemberId) const capValue = pref?.cap ?? m.currentCap const ratioValue = pref?.ratio ?? m.preferredStartupRatio ?? 0.5 return (

{m.juryGroupName}

updatePref(m.juryGroupMemberId, 'cap', v)} min={1} max={50} step={1} />

Admin suggestion: {m.currentCap}. Adjust to match your availability.

updatePref(m.juryGroupMemberId, 'ratio', v / 100)} min={0} max={100} step={10} />
More Business Concepts More Startups

This is a preference, not a guarantee. Due to the number of projects, the system will try to match your preference but exact ratios cannot be ensured.

) })}
) }