import React, { useEffect, useMemo, useState } from "react"; import { Box, Button, Paper, Typography } from "@mui/material"; import { api } from "../api"; import { clearAuthToken, getAuthToken } from "../auth"; import { useToast } from "../toast"; import { useI18n } from "../i18n/I18nProvider"; type MeResponse = { provider?: string; id?: string; email?: string; userName?: string; firstName?: string; lastName?: string; displayName?: string; roles?: string[]; googleLink?: { linked: boolean; email?: string | null; } | null; }; export default function AuthStatusCard() { const { toast } = useToast(); const { t } = useI18n(); const token = getAuthToken(); const [me, setMe] = useState(null); useEffect(() => { if (!token) { setMe(null); return; } api .get("/auth/me") .then((r) => setMe(r.data)) .catch(() => setMe(null)); }, [token]); const label = useMemo(() => me?.userName || me?.displayName || [me?.firstName, me?.lastName].filter(Boolean).join(" ") || me?.email, [me]); return ( {t("authStatusTitle")} {!token ? ( {t("authStatusNotSignedIn")} ) : ( Signed in{label ? ` as ${label}` : ""}{me?.provider ? ` (${me.provider})` : ""}. {me?.roles && me.roles.length > 0 ? ( {t("authStatusRoles", { roles: me.roles.join(", ") })} ) : null} {me?.googleLink?.linked ? ( {t("authStatusGoogleLinked", { suffix: me.googleLink.email ? `: ${me.googleLink.email}` : "." })} ) : null} )} ); }