"use client"; import { Plus, Trash2 } from "lucide-react"; import { useState } from "react"; import { addEventPrize, deleteEventPrize } from "@/actions/events"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useServerAction } from "@/hooks/use-server-action"; interface Prize { id: number; position: number; prizeType: string; badgeCode: string | null; credits: number; pixels: number; points: number; itemId: number | null; description: string; } interface Props { eventId: number; prizes: Prize[]; } export function EventPrizesManager({ eventId, prizes }: Props) { const { run, isPending } = useServerAction(); const [showForm, setShowForm] = useState(false); const [form, setForm] = useState({ position: prizes.length + 1, prizeType: "badge" as string, badgeCode: "", credits: 0, pixels: 0, points: 0, description: "", }); function handleAdd(e: React.FormEvent) { e.preventDefault(); // biome-ignore lint/suspicious/noExplicitAny: explicitly chosen here, see surrounding code run(() => addEventPrize({ eventId, ...form } as any), { successMessage: "Prize added!", onSuccess: () => { setShowForm(false); setForm({ ...form, position: form.position + 1, badgeCode: "", description: "", }); }, }); } return ( Prizes {showForm && (
setForm({ ...form, position: Number(e.target.value) }) } />
setForm({ ...form, badgeCode: e.target.value }) } placeholder="ACH_..." />
setForm({ ...form, credits: Number(e.target.value) }) } />
setForm({ ...form, description: e.target.value }) } />
)} {prizes.length === 0 && !showForm && (

No prizes configured yet.

)} {prizes.map((prize) => (
#{prize.position}
{prize.prizeType} {prize.badgeCode && ( {prize.badgeCode} )} {prize.credits > 0 && ( {prize.credits} credits )} {prize.pixels > 0 && ( {prize.pixels} pixels )} {prize.points > 0 && ( {prize.points} points )}
{prize.description && (

{prize.description}

)}
))}
); }