import { useState, useEffect } from "react"; import { data, useFetcher } from "react-router"; import { useTranslation } from "react-i18next"; import type { Route } from "./+types/settings.account"; import { loadAccountSettings } from "./settings.account.server"; export function meta() { return [{ title: "Account — Settings — trails.cool" }]; } export async function loader({ request }: Route.LoaderArgs) { return data(await loadAccountSettings(request)); } export default function AccountSettings({ loaderData }: Route.ComponentProps) { const { user } = loaderData; const { t } = useTranslation(["journal", "common"]); const emailFetcher = useFetcher(); const [newEmail, setNewEmail] = useState(""); const [showEmailForm, setShowEmailForm] = useState(false); const [emailSent, setEmailSent] = useState(false); const [deleteConfirm, setDeleteConfirm] = useState(false); const [deleteUsername, setDeleteUsername] = useState(""); useEffect(() => { if (emailFetcher.data && !emailFetcher.data.error) { setEmailSent(true); } }, [emailFetcher.data]); return (

{t("settings.account.title")}

{/* Email */}

{user.email}

{!showEmailForm && !emailSent && ( )}
{showEmailForm && !emailSent && ( setNewEmail(e.target.value)} placeholder={t("settings.account.newEmailPlaceholder")} className="block flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500" /> )} {emailFetcher.data?.error && (

{emailFetcher.data.error}

)} {emailSent && (

{t("settings.account.verificationSent")}

)}
{/* Delete Account */}

{t("settings.account.dangerZone")}

{t("settings.account.deleteDescription")}

{!deleteConfirm ? ( ) : (

{t("settings.account.deleteConfirmPrompt", { username: user.username })}

setDeleteUsername(e.target.value)} placeholder={user.username} className="block w-full rounded-md border border-red-300 px-3 py-2 text-sm" />
)}
); }