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"; 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 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?.displayName || [me?.firstName, me?.lastName].filter(Boolean).join(" ") || me?.email, [me]); return ( Authentication {!token ? ( Not signed in. ) : ( Signed in{label ? ` as ${label}` : ""}{me?.provider ? ` (${me.provider})` : ""}. {me?.roles && me.roles.length > 0 ? ( Roles: {me.roles.join(", ")} ) : null} {me?.googleLink?.linked ? ( Google linked{me.googleLink.email ? `: ${me.googleLink.email}` : "."} ) : null} )} ); }