import React from "react"; import clsx from "clsx"; import Gravatar from "react-gravatar"; import { getMe } from "src/utils/me"; import type { MeResponse } from "src/interfaces/api"; import { logoutUser } from "src/utils/auth"; import { useNavigate } from "react-router-dom"; export const HeaderAuthStatus = () => { const [me, setMe] = React.useState(null); const [logoutVisible, setLogoutVisible] = React.useState(false); const buttonRef = React.useRef(null); const navigate = useNavigate(); React.useEffect(() => { getMe().then((res) => (res ? setMe(res) : null)); }, []); React.useEffect(() => { if (logoutVisible) { const listener = (e: MouseEvent) => { if (buttonRef.current?.contains(e.target as Node)) return; setLogoutVisible(false); }; document.addEventListener("click", listener); return () => { document.removeEventListener("click", listener); }; } return () => 0; }, [logoutVisible]); const logout = React.useCallback(() => { logoutUser().then(() => { setTimeout(() => { navigate("/login"); }, 100); }); }, [navigate]); return (
{me && (
)} ); };