import { useEffect, useState } from "react"; import { useAuth } from "../../contexts/AuthContext"; import Input from "../../components/Input"; import Button from "../../components/Button"; import { submitSupportRequest } from "../../api/support"; import "./Support.css"; const EMAIL_MAX = 320; const DESCRIPTION_MAX = 8000; const DESCRIPTION_PATTERN = /^[a-zA-Z0-9\s]+$/; function validateEmail(value) { const v = value.trim(); if (!v) return "Email is required."; if (v.length > EMAIL_MAX) return "Email is too long."; const ok = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test( v, ); if (!ok) return "Enter a valid email address."; return null; } function validateDescription(value) { const t = value.trim(); if (!t) return "Description of issue is required."; if (t.length > DESCRIPTION_MAX) return "Description is too long."; if (!DESCRIPTION_PATTERN.test(t)) { return "Use only letters, numbers, and spaces (no special characters)."; } return null; } export default function Support() { const { currentUser } = useAuth(); const [email, setEmail] = useState(""); const [description, setDescription] = useState(""); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const [sending, setSending] = useState(false); useEffect(() => { if (currentUser?.email) { setEmail(currentUser.email); } }, [currentUser?.email]); async function handleSubmit(e) { e.preventDefault(); setError(null); setSuccess(false); const emailErr = validateEmail(email); if (emailErr) { setError(emailErr); return; } const descErr = validateDescription(description); if (descErr) { setError(descErr); return; } setSending(true); try { await submitSupportRequest({ email: email.trim(), description: description.trim(), }); setSuccess(true); setDescription(""); } catch (err) { setError(err.message || "Something went wrong."); } finally { setSending(false); } } return (

Contact support

Describe your issue below. We will reply to the email address you provide.

{error &&
{error}
} {success && (
Your message was sent. Thank you.
)}