"use client" import { Github, PlusCircle, Search } from "lucide-react" import Link from "next/link" import { useEffect, useState } from "react" import { IconSubmissionForm } from "@/components/icon-submission-form" import { ThemeSwitcher } from "@/components/theme-switcher" import { REPO_PATH } from "@/constants" import { getIconsArray } from "@/lib/api" import { pb } from "@/lib/pb" import type { IconWithName } from "@/types/icons" import { CommandMenu } from "./command-menu" import { HeaderNav } from "./header-nav" import { Button } from "./ui/button" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip" import { LoginPopup } from "./user-button" interface UserData { username: string email: string avatar?: string } export function Header() { const [iconsData, setIconsData] = useState([]) const [isLoaded, setIsLoaded] = useState(false) const [commandMenuOpen, setCommandMenuOpen] = useState(false) const [isLoggedIn, setIsLoggedIn] = useState(false) const [userData, setUserData] = useState(undefined) useEffect(() => { async function loadIcons() { try { const icons = await getIconsArray() setIconsData(icons) setIsLoaded(true) } catch (error) { console.error("Failed to load icons:", error) setIsLoaded(true) } } loadIcons() }, []) useEffect(() => { // Initialize auth state from PocketBase authStore const updateAuthState = () => { if (pb.authStore.isValid && pb.authStore.record) { setIsLoggedIn(true) setUserData({ username: pb.authStore.record.username || pb.authStore.record.email, email: pb.authStore.record.email, avatar: pb.authStore.record.avatar ? `${pb.baseURL}/api/files/_pb_users_auth_/${pb.authStore.record.id}/${pb.authStore.record.avatar}` : undefined, }) } else { setIsLoggedIn(false) setUserData(undefined) } } // Set initial state updateAuthState() // Listen for auth changes const unsubscribe = pb.authStore.onChange(() => { updateAuthState() }) // Cleanup listener on unmount return () => { unsubscribe() } }, []) // Function to open the command menu const openCommandMenu = () => { setCommandMenuOpen(true) } // Handle sign out using PocketBase const handleSignOut = () => { pb.authStore.clear() } return (
Dashboard Icons
{/* Desktop search button */}
{/* Mobile search button */}
{/* Mobile Submit Button -> triggers IconSubmissionForm dialog */}
Submit icon(s) } />
{/* Desktop Submit Button */}

View on GitHub

{/* Single instance of CommandMenu */} {isLoaded && ( )}
); }