/** * @file components/layout/AppHeader.tsx * @description Application top header component providing navigation controls, dynamic channel or friend tab titles, optional server settings, member list toggles, and legal views support. */ "use client"; import { useSidebarStore } from "@/lib/stores/useSidebarStore"; import { PanelLeftOpen, PanelLeftClose, Users, Hash, Settings, FileText, ShieldCheck, } from "lucide-react"; import { ServerSettingsMenu } from "./ServerSettingsMenu"; import { FriendsHeader, TabType } from "@/components/friends/FriendsHeader"; /** Properties for the AppHeader component. */ interface AppHeaderProps { title?: string; showMembersButton?: boolean; server?: { id: string; name: string; color: string; }; showFriendsTabs?: boolean; activeTab?: TabType; setActiveTab?: (tab: TabType) => void; allCount?: number; pendingCount?: number; isSettings?: boolean; isLegalImprint?: boolean; isLegalPrivacy?: boolean; } /** Renders the application header with navigation controls, dynamic titles, tabs, and action buttons. */ export function AppHeader({ title, showMembersButton = false, server, showFriendsTabs = false, activeTab, setActiveTab, allCount = 0, pendingCount = 0, isSettings = false, isLegalImprint = false, isLegalPrivacy = false, }: AppHeaderProps) { const { isNavOpen, toggleNav, toggleMembers } = useSidebarStore(); const isLegalView = isLegalImprint || isLegalPrivacy; const hasContent = !isNavOpen || !!title || showMembersButton || !!server || showFriendsTabs || isSettings || isLegalView; return (
{/* Toggle button for navigation */} {/* Settings View Header Title */} {isSettings && (

Settings

)} {/* Legal Imprint Header Title */} {isLegalImprint && (

Imprint

)} {/* Legal Privacy Header Title */} {isLegalPrivacy && (

Privacy Policy

)} {/* Dynamic Channel Title */} {!isSettings && !isLegalView && title && (

{title}

)} {/* Friends Header Component */} {!isSettings && !isLegalView && showFriendsTabs && setActiveTab && activeTab && ( )}
{/* Right Action Buttons */}
{server && ( )} {showMembersButton && ( )}
); }