import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '@/components/ui/command'; import { useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { CommandIcon, SearchIcon } from 'lucide-react'; import CreateServer from '@/pages/servers/components/create-server'; import ProjectForm from '@/pages/projects/components/project-form'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { Badge } from '@/components/ui/badge'; import { router } from '@inertiajs/react'; type SearchResult = { id: number; parent_id?: number; label: string; type: 'server' | 'project' | 'site'; }; export default function AppCommand() { const [open, setOpen] = useState(false); const [openServer, setOpenServer] = useState(false); const [openProject, setOpenProject] = useState(false); const [queryText, setQueryText] = useState(''); const [selected, setSelected] = useState('create-server'); 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); }, []); const handleOpenChange = (open: boolean) => { setOpen(open); if (!open) { setOpenServer(false); setOpenProject(false); } }; const query = useQuery({ queryKey: ['search'], queryFn: async () => { const response = await axios.get(route('search', { query: queryText })); return response.data.data; }, retry: false, enabled: false, refetchInterval: false, refetchIntervalInBackground: false, }); useEffect(() => { if (query.data && query.data.length > 0) { setSelected(`result-0`); } else { setSelected('create-server'); } }, [query.data]); useEffect(() => { if (queryText !== '' && queryText.length >= 3) { const timeoutId = setTimeout(() => { query.refetch(); }, 300); return () => clearTimeout(timeoutId); } }, [queryText]); return (
No results found. {query.isFetching &&

Searching...

} {query.data && query.data?.length > 0 && ( {query.data.map((result, index) => ( { if (result.type === 'server') { router.post(route('servers.switch', { server: result.id })); } else if (result.type === 'project') { router.patch( route('projects.switch', { project: result.id, currentPath: window.location.pathname, }), ); } else if (result.type === 'site') { router.post(route('sites.switch', { server: result.parent_id, site: result.id })); } setOpen(false); }} > {result.label} {result.type} ))} )} setOpenServer(true)}> Create server setOpenProject(true)}> Create project
); }