'use client' import { useEffect, useState } from 'react' import { useRouter, useParams } from 'next/navigation' import Link from 'next/link' import { trpc } from '@/lib/trpc/client' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Skeleton } from '@/components/ui/skeleton' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@/components/ui/alert-dialog' import { ArrowLeft, Loader2, Trash2 } from 'lucide-react' import { toast } from 'sonner' export default function EditProgramPage() { const router = useRouter() const params = useParams() const id = params.id as string const [isSubmitting, setIsSubmitting] = useState(false) const [formData, setFormData] = useState({ name: '', description: '', status: 'DRAFT', }) const { data: program, isLoading } = trpc.program.get.useQuery({ id }) useEffect(() => { if (program) { setFormData({ name: program.name, description: program.description || '', status: program.status, }) } }, [program]) const updateProgram = trpc.program.update.useMutation({ onSuccess: () => { toast.success('Program updated successfully') router.push(`/admin/programs/${id}`) }, onError: (error) => { toast.error(error.message || 'Failed to update program') setIsSubmitting(false) }, }) const deleteProgram = trpc.program.delete.useMutation({ onSuccess: () => { toast.success('Program deleted successfully') router.push('/admin/programs') }, onError: (error) => { toast.error(error.message || 'Failed to delete program') }, }) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsSubmitting(true) updateProgram.mutate({ id, name: formData.name, description: formData.description || undefined, status: formData.status as 'DRAFT' | 'ACTIVE' | 'ARCHIVED', }) } // Delete handled via AlertDialog in JSX if (isLoading) { return (
) } return (

Edit Program

Update program information

Delete Program This will permanently delete this program and all its rounds and projects. This action cannot be undone. Cancel deleteProgram.mutate({ id })}> Delete
Program Details Basic information about the program
setFormData({ ...formData, name: e.target.value })} required />