"use client"; import { User } from "@/lib/types"; import { logout } from "@/lib/user"; import { UserCircle } from "@phosphor-icons/react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; import React, { useEffect, useRef, useState } from "react"; interface HeaderProps { user: User | null; } export const Header: React.FC = ({ user }) => { const router = useRouter(); const [dropdownOpen, setDropdownOpen] = useState(false); const dropdownRef = useRef(null); const handleLogout = () => { logout().then((isSuccess) => { if (!isSuccess) { alert("Failed to logout"); } router.push("/auth/login"); }); }; // When dropdownOpen state changes, it attaches/removes the click listener useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(e.target as Node) ) { setDropdownOpen(false); } }; if (dropdownOpen) { document.addEventListener("click", handleClickOutside); } else { document.removeEventListener("click", handleClickOutside); } // Clean up function to remove listener when component unmounts return () => { document.removeEventListener("click", handleClickOutside); }; }, [dropdownOpen]); return (
Logo

Danswer

setDropdownOpen(!dropdownOpen)} ref={dropdownRef} > {dropdownOpen && (
Personal Connectors
{/* Show connector option if (1) auth is disabled or (2) user is an admin */} {(!user || user.role === "admin") && (
Admin Panel
)} {user && (
Logout
)}
)}
); };