import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Box, Button, TextField, Typography, Container, Paper, Chip, Input, } from '@mui/material'; import axios from 'axios'; interface FormData { title: string; description: string; date: string; location: string; needed_items: string[]; } const EventForm: React.FC = () => { const navigate = useNavigate(); const [formData, setFormData] = useState({ title: '', description: '', date: '', location: '', needed_items: [], }); const [wallpaper, setWallpaper] = useState(null); const [currentItem, setCurrentItem] = useState(''); const [error, setError] = useState(null); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); }; const handleWallpaperChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { setWallpaper(e.target.files[0]); } }; const handleItemChange = (e: React.ChangeEvent) => { setCurrentItem(e.target.value); }; const handleAddItem = () => { if (currentItem.trim()) { setFormData((prev) => ({ ...prev, needed_items: [...prev.needed_items, currentItem.trim()], })); setCurrentItem(''); } }; const handleRemoveItem = (index: number) => { setFormData((prev) => ({ ...prev, needed_items: prev.needed_items.filter((_, i) => i !== index), })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); try { const submitData = new FormData(); // Append all form fields Object.entries(formData).forEach(([key, value]) => { if (key === 'needed_items') { submitData.append(key, JSON.stringify(value)); } else { submitData.append(key, String(value)); } }); // Append wallpaper if selected if (wallpaper) { submitData.append('wallpaper', wallpaper); } await axios.post('/api/events', submitData, { headers: { 'Content-Type': 'multipart/form-data', }, }); navigate('/'); } catch (error) { setError('Failed to create event. Please try again.'); console.error('Error creating event:', error); } }; return ( Create New Event {error && ( {error} )} Event Wallpaper {wallpaper && ( Selected file: {wallpaper.name} )} Needed Items {formData.needed_items.map((item, index) => ( handleRemoveItem(index)} color="primary" /> ))} ); }; export default EventForm;