import { useRef, useState } from "react";
import { Home, LogOut, Search, Settings, Shield, Tv } from "lucide-react";
import type { FeedFilters, Me } from "../lib/api";
import type { Page } from "../lib/urlState";
import SyncStatus from "./SyncStatus";
import NotificationCenter from "./NotificationCenter";
export default function Header({
me,
filters,
setFilters,
page,
setPage,
onOpenSettings,
}: {
me: Me;
filters: FeedFilters;
setFilters: (f: FeedFilters) => void;
page: Page;
setPage: (p: Page) => void;
onOpenSettings: () => void;
}) {
async function logout() {
await fetch("/auth/logout", { method: "POST", credentials: "include" });
location.reload();
}
return (
);
}
function Avatar({ me, className = "" }: { me: Me; className?: string }) {
return me.avatar_url ? (
) : (
{(me.display_name?.[0] ?? me.email[0] ?? "?").toUpperCase()}
);
}
function AccountMenu({
me,
logout,
page,
setPage,
onOpenSettings,
}: {
me: Me;
logout: () => void;
page: Page;
setPage: (p: Page) => void;
onOpenSettings: () => void;
}) {
const [open, setOpen] = useState(false);
const closeTimer = useRef | null>(null);
function openNow() {
if (closeTimer.current) clearTimeout(closeTimer.current);
setOpen(true);
}
function closeSoon() {
closeTimer.current = setTimeout(() => setOpen(false), 220);
}
const itemClass =
"w-full flex items-center gap-2 text-sm px-2 py-2 rounded-lg text-muted hover:text-fg hover:bg-card transition";
return (
{open && (
{me.display_name ?? me.email.split("@")[0]}
{me.email}
{me.role === "admin" && (
Admin
)}
{page === "channels" ? (
) : (
)}
)}
);
}