import { TextField, FormControlLabel, Checkbox, Button, Alert, CircularProgress, Autocomplete, Chip, Box, Paper, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useState, useEffect } from "react"; import { submitFormData } from "../utils/sender"; import Cookies from "js-cookie"; interface Message { type: "error" | "info" | "success" | "warning"; headline: string; text: string; } export const MainForm = () => { const { t } = useTranslation(); const [invoice, setInvoice] = useState(false); const [msg, setMsg] = useState(null); const [isLoading, setIsLoading] = useState(false); const [nextID, setNextID] = useState(null); const [formData, setFormData] = useState({ firstName: "", lastName: "", email: "", phoneNumber: "", tickets: 1, companyName: "", cmpFirstName: "", cpmLastName: "", cpmEmail: "", cpmPhoneNumber: "", street: "", postalCode: "", paymentMethod: "", }); const [users, setUsers] = useState([]); const [selectedUser, setSelectedUser] = useState(null); useEffect(() => { // Fetch user data or any other data needed for the form try { const fetchUsers = async () => { const response = await fetch("http://localhost:8004/default/users"); const data = await response.json(); setUsers(data.users); }; fetchUsers(); console.log(users); } catch (error) { setMsg({ type: "error", headline: t("error"), text: t("failed-to-load-users"), }); console.error("Error fetching users:", error); } if (Cookies.get("selectedUser")) { const cookieUser = Cookies.get("selectedUser")!; setSelectedUser(cookieUser); confirmUser(cookieUser); } }, [isLoading]); const handleChange = (e: React.ChangeEvent) => { setFormData({ ...formData, [e.target.name]: e.target.value }); }; const confirmUser = async (selectedUser: string) => { try { const response = await fetch( `http://localhost:8004/default/confirm-user?username=${selectedUser}`, ); const data = await response.json(); setNextID(data.nextID); } catch (error) { console.error("Error confirming user:", error); } }; const handleUserSelection = (selectedUser: string | null) => { if (!selectedUser) return; setSelectedUser(selectedUser); confirmUser(selectedUser); Cookies.set("selectedUser", selectedUser); }; const handleSubmit = async () => { setIsLoading(true); try { const result = await submitFormData(formData, selectedUser || ""); if (result.success) { document.location.href = `/success?id=${nextID}&tickets=${formData.tickets}`; } else { setMsg({ type: "error", headline: t("error"), text: result.error || t("form-submission-failed"), }); } } finally { setIsLoading(false); } }; return (
{ e.preventDefault(); handleSubmit(); }} className="flex flex-col gap-4" > {/* User Selection */} ( )} onChange={(_event, value) => handleUserSelection(value)} onKeyDown={(event) => { if (event.key === "Enter") { event.defaultMuiPrevented = true; } }} /> {/* Next ID Chip */} {/* Name Fields - Two Columns */} {/* Email */} {/* Phone Number */} {/* Tickets and Invoice Checkbox */} setInvoice(e.target.checked)} /> } label={t("invoice")} className="justify-end" /> {/* Invoice Fields */} {invoice && ( {/* Invoice Name Fields - Two Columns */} )} {/* Payment Methods */} } label={t("cash")} /> } label={t("paypal")} /> } label={t("transfer")} /> {/* Submit Button */} {/* Alert Message */} {msg && ( {msg.headline}: {msg.text} )}
); };