'use client' import { useState } from 'react' import { trpc } from '@/lib/trpc/client' import { toast } from 'sonner' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Loader2, Save, Settings } from 'lucide-react' type CompetitionSettingsProps = { competitionId: string initialSettings: { categoryMode: string startupFinalistCount: number conceptFinalistCount: number notifyOnRoundAdvance: boolean notifyOnDeadlineApproach: boolean deadlineReminderDays: number[] } } export function CompetitionSettings({ competitionId, initialSettings }: CompetitionSettingsProps) { const [settings, setSettings] = useState(initialSettings) const [dirty, setDirty] = useState(false) const updateMutation = trpc.competition.update.useMutation({ onSuccess: () => { toast.success('Competition settings saved') setDirty(false) }, onError: (err) => toast.error(err.message), }) function update(key: K, value: (typeof settings)[K]) { setSettings((prev) => ({ ...prev, [key]: value })) setDirty(true) } function handleSave() { updateMutation.mutate({ id: competitionId, ...settings }) } return (
Competition Settings Category mode, finalist targets, and notification preferences
{dirty && ( )}
update('startupFinalistCount', parseInt(e.target.value) || 1)} />
update('conceptFinalistCount', parseInt(e.target.value) || 1)} />

Notifications

Email applicants when their project advances

update('notifyOnRoundAdvance', v)} />

Send reminders before deadlines

update('notifyOnDeadlineApproach', v)} />
{settings.deadlineReminderDays.map((day, idx) => ( {day}d ))} { if (e.key === 'Enter') { const val = parseInt((e.target as HTMLInputElement).value) if (val > 0 && !settings.deadlineReminderDays.includes(val)) { update('deadlineReminderDays', [...settings.deadlineReminderDays, val].sort((a, b) => b - a)) ;(e.target as HTMLInputElement).value = '' } } }} />
) }