"use client"; import React, { useState } from "react"; import { useAuth } from "@/hooks/useAuth"; import { apiFetch, resolveToApiOrigin } from "@/lib/api"; import { Button } from "@/components/shared/Button"; export function EventForm({ onCreated }: { onCreated?: () => void }) { const { token } = useAuth(); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [startDate, setStartDate] = useState(""); const [endDate, setEndDate] = useState(""); const [price, setPrice] = useState(0); const [picture, setPicture] = useState(""); const [imagePreview, setImagePreview] = useState(null); const [uploadingImage, setUploadingImage] = useState(false); const [isHidden, setIsHidden] = useState(false); const [requiresAuth, setRequiresAuth] = useState(true); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function handleImageFile(file: File) { setUploadingImage(true); setError(null); try { const fd = new FormData(); fd.append("image", file); const data = await apiFetch<{ url: string }>("/api/uploads/event-image", { method: "POST", authToken: token, body: fd, }); setPicture(data.url); setImagePreview(URL.createObjectURL(file)); } catch (e: any) { setError(e?.message || "Image upload failed"); } finally { setUploadingImage(false); } } function clearImage() { setImagePreview(null); setPicture(""); } async function submit(e: React.FormEvent) { e.preventDefault(); if (!token) { setError("Please login"); return; } setLoading(true); setError(null); try { await apiFetch("/api/events", { method: "POST", authToken: token, body: { title, description, startDate, endDate, price, picture, isHidden, requiresAuth }, }); onCreated?.(); setTitle(""); setDescription(""); setStartDate(""); setEndDate(""); setPrice(0); setPicture(""); setImagePreview(null); setIsHidden(false); setRequiresAuth(true); } catch (e: any) { setError(e?.message || "Failed to create event"); } finally { setLoading(false); } } const previewSrc = imagePreview || (picture ? resolveToApiOrigin(picture) : null); return (
setTitle(e.target.value)} required />