'use client' import React, { useEffect, useState } from 'react' import { toast } from 'sonner' import { Label } from '../ui/label' import { Input } from '../ui/input' import { Button } from '../ui/button' import CreateVenueForm from './CreateVenueForm' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/dialog' interface CreateEventFormProps { onSuccess?: () => void } export default function CreateEventForm({ onSuccess }: CreateEventFormProps) { const [formData, setFormData] = useState({ name: '', date: '', venueId: '' }) const [venues, setVenues] = useState<{ id: string; name: string }[]>([]) // const [showVenueForm, setShowVenueForm] = useState(false) const [venueDialogOpen, setVenueDialogOpen] = useState(false) useEffect(() => { async function fetchVenues() { const res = await fetch('/api/venues/fetch') const data = await res.json() setVenues(data) } fetchVenues() }, []) function handleChange(e: React.ChangeEvent) { const { name, value } = e.target setFormData(prev => ({ ...prev, [name]: value })) } async function handleSubmit(e: React.FormEvent) { e.preventDefault() if (!formData.name || !formData.date) { toast.error('Event Name and Date are required') return } try { const res = await fetch('/api/events/create', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: formData.name, date: formData.date, venueId: formData.venueId || null }) }) if (!res.ok) throw new Error('Failed to create event') toast.success('Event created!') if (onSuccess) onSuccess() } catch (err) { toast.error('Something went wrong') console.error(err) } } return ( <>
{/* Event Details */}
{/* Venue Selection */}
{/* Submit */}
e.preventDefault()}> Create New Venue Fill in venue details { // 1. Close the dialog setVenueDialogOpen(false) // 2. Refresh venues list const res = await fetch('/api/venues/fetch') const updated = await res.json() setVenues(updated) // 3. Update formData with new venue setFormData(prev => ({ ...prev, venueId: newVenueId || '' })) }} /> ) }