import React, { useEffect, useState } from "react"; import { Alert, Box, Button, CircularProgress, Paper, Typography } from "@mui/material"; import { useNavigate } from "react-router-dom"; import { api, getApiErrorMessage } from "../api"; import { useI18n } from "../i18n/I18nProvider"; type Status = "verifying" | "success" | "error"; export default function VerifyEmailPage({ emailChange = false }: { emailChange?: boolean }) { const { t } = useI18n(); const navigate = useNavigate(); const [status, setStatus] = useState("verifying"); const [errorMessage, setErrorMessage] = useState(null); useEffect(() => { const params = new URLSearchParams(window.location.search); const userId = params.get("userId") || ""; const email = params.get("email") || ""; const token = params.get("token") || ""; if (!userId || !token || (emailChange && !email)) { setStatus("error"); setErrorMessage(t(emailChange ? "missingEmailChangeLinkInfo" : "missingVerifyLinkInfo")); return; } api .post(emailChange ? "/auth/email-change/confirm" : "/auth/verify-email", emailChange ? { userId, email, token } : { userId, token }) .then(() => setStatus("success")) .catch((e: any) => { setStatus("error"); setErrorMessage(getApiErrorMessage(e, t("verifyEmailFailed"))); }); }, [emailChange, t]); return ( {t(emailChange ? "confirmEmailChangeTitle" : "verifyEmailTitle")} {status === "verifying" && ( {t(emailChange ? "confirmEmailChangeVerifying" : "verifyEmailVerifying")} )} {status === "success" && {t(emailChange ? "confirmEmailChangeSuccess" : "verifyEmailSuccess")}} {status === "error" && {errorMessage}} ); }