'use client' import { useForm } from 'react-hook-form' import { createEvent, updateEvent } from '@/actions/events' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { DateTimePicker } from '@/components/ui/date-time-picker' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { useServerAction } from '@/hooks/use-server-action' import type { CreateEventInput } from '@/lib/validators/event' interface EventType { id: number name: string slug: string color: string } interface EventFormProps { eventTypes: EventType[] defaultValues?: Partial & { id?: number } } export function EventForm({ eventTypes, defaultValues }: EventFormProps) { const { run, isPending } = useServerAction() const isEditing = !!defaultValues?.id const form = useForm({ defaultValues: { title: '', description: '', typeId: eventTypes[0]?.id, status: 'draft', isRecurring: 0, ...defaultValues, }, }) // biome-ignore lint/suspicious/noExplicitAny: form values typed by useForm defaults; createEvent does its own zod validation function onSubmit(data: any) { if (isEditing && defaultValues?.id) { run(() => updateEvent({ id: defaultValues.id!, ...data }), { successMessage: 'Event updated!', }) } else { run(() => createEvent(data), { successMessage: 'Event created!', onSuccess: (result) => { const data = result.data as Record | undefined if (data?.id) { window.location.href = `/admin/events/${data.id}` } }, }) } } return (
{isEditing ? 'Edit Event' : 'Event Details'}
{form.formState.errors.title && (

{form.formState.errors.title.message}

)}