'use client' import { useState, useTransition } from 'react' import { useRouter } from '@/i18n/routing' import { createOrUpdateEventAction } from '@/app/actions' import { ArrowLeft, Save, Loader2, Sparkles } from 'lucide-react' import { Link } from '@/i18n/routing' interface Props { event: any | null listings: any[] } export default function EventFormClient({ event, listings }: Props) { const router = useRouter() const [isPending, startTransition] = useTransition() const [error, setError] = useState(null) // Format dates for datetime-local input (YYYY-MM-DDTHH:MM) const formatDateForInput = (dateVal: any) => { if (!dateVal) return '' const d = new Date(dateVal) const pad = (num: number) => String(num).padStart(2, '0') return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}` } const [formData, setFormData] = useState({ id: event?.id || 'new', slug: event?.slug || '', listingId: event?.listingId || '', titleTr: event?.titleTr || '', titleEn: event?.titleEn || '', titleRu: event?.titleRu || '', descriptionTr: event?.descriptionTr || '', descriptionEn: event?.descriptionEn || '', descriptionRu: event?.descriptionRu || '', startDate: formatDateForInput(event?.startDate), endDate: formatDateForInput(event?.endDate), isSponsored: event?.isSponsored ? 'true' : 'false', coverImageUrl: event?.coverImage || '' }) const [selectedFile, setSelectedFile] = useState(null) const generateSlug = (text: string) => { return text .toLowerCase() .trim() .replace(/[^\w\s-]/g, '') .replace(/[\s_-]+/g, '-') .replace(/^-+|-+$/g, '') } const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target setFormData(prev => { if (name === 'titleTr' && !event) { return { ...prev, [name]: value, slug: generateSlug(value) } } return { ...prev, [name]: value } }) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) if (!formData.slug || !formData.titleTr || !formData.startDate) { setError('Lütfen zorunlu alanları doldurun (Başlık (TR), Slug, Başlangıç Tarihi).') return } startTransition(async () => { const data = new FormData() Object.entries(formData).forEach(([key, val]) => { data.append(key, val) }) if (selectedFile) { data.append('coverImageFile', selectedFile) } const res = await createOrUpdateEventAction(data) if (res.success) { router.push('/admin/events') router.refresh() } else { setError(res.error || 'Kaydetme işlemi başarısız.') } }) } return (
{error && (
{error}
)}
{/* Core fields */}
{/* Association & Sponsored */}
{/* Dates */}
{/* Descriptions */}