"use client" import * as React from "react" import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, } from "@/components/ui/command" import { Search, Music, MapPin, Calendar, Users, Globe } from "lucide-react" import { useRouter } from "next/navigation" import { getApiUrl } from "@/lib/api-config" export function SearchDialog() { const [open, setOpen] = React.useState(false) const [query, setQuery] = React.useState("") const [results, setResults] = React.useState({ songs: [], venues: [], tours: [], groups: [], users: [], nicknames: [], performances: [] }) const router = useRouter() React.useEffect(() => { const down = (e: KeyboardEvent) => { if (e.key === "k" && (e.metaKey || e.ctrlKey)) { e.preventDefault() setOpen((open) => !open) } } document.addEventListener("keydown", down) return () => document.removeEventListener("keydown", down) }, []) React.useEffect(() => { if (query.length < 2) { setResults({ songs: [], venues: [], tours: [], groups: [], users: [], nicknames: [], performances: [] }) return } const timer = setTimeout(() => { fetch(`${getApiUrl()}/search/?q=${query}`) .then(res => res.json()) .then(data => setResults(data)) .catch(err => console.error(err)) }, 300) return () => clearTimeout(timer) }, [query]) const handleSelect = (url: string) => { setOpen(false) router.push(url) } return ( <> No results found. {results.songs.length > 0 && ( {results.songs.map((song: any) => ( handleSelect(`/songs/${song.id}`)}> {song.title} ))} )} {results.venues.length > 0 && ( {results.venues.map((venue: any) => ( handleSelect(`/venues/${venue.id}`)}> {venue.name} ))} )} {results.tours.length > 0 && ( {results.tours.map((tour: any) => ( handleSelect(`/tours/${tour.id}`)}> {tour.name} ))} )} {results.groups.length > 0 && ( {results.groups.map((group: any) => ( handleSelect(`/groups/${group.id}`)}> {group.name} ))} )} {results.nicknames && results.nicknames.length > 0 && ( {results.nicknames.map((nickname: any) => ( handleSelect(`/performances/${nickname.performance_id}`)}> {nickname.nickname} ))} )} {results.performances && results.performances.length > 0 && ( {results.performances.map((perf: any) => ( handleSelect(`/performances/${perf.id}`)}> {perf.song?.title} - {perf.notes} ))} )} {results.users.length > 0 && ( {results.users.map((user: any) => ( handleSelect(`/profile/${user.id}`)}> {user.email} ))} )} ) }