import { TextField, FormControlLabel, Checkbox, Button, Alert, CircularProgress, Autocomplete, Chip, Box, Paper, Typography, IconButton, } from "@mui/material"; import { useTranslation } from "../../node_modules/react-i18next"; import { useState, useEffect } from "react"; import { submitFormData } from "../utils/sender"; import Cookies from "../../node_modules/@types/js-cookie"; import * as React from "react"; import TranslateIcon from "@mui/icons-material/Translate"; import { API_BASE } from "../config/api.config"; interface Message { type: "error" | "info" | "success" | "warning"; headline: string; text: string; } export const MainForm = () => { const { t, i18n } = 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); const changeTranslation = () => { const clientLng = i18n.language; if (clientLng === "en") { i18n.changeLanguage("de"); } else if (clientLng === "de") { i18n.changeLanguage("en"); } else { setMsg({ type: "error", headline: "Error", text: "Cannot change langugage.", }); } }; useEffect(() => { // Fetch user data or any other data needed for the form try { const fetchUsers = async () => { const response = await fetch(`${API_BASE}/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( `${API_BASE}/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 ( changeTranslation()} aria-label="translate" >
{ 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 */} {t("select-payment-method")} * {!formData.paymentMethod && ( {}} /> )} {/* Submit Button */} {/* Alert Message */} {msg && ( {msg.headline}: {msg.text} )}
); };