import { useRef, useEffect } from 'react'; import { useCommandPalette } from './use-command-palette'; import { parseFilterPrefix, checkTrailingFilter } from './utils'; import styles from './CommandPalette.module.css'; export function PaletteInput() { const { query, filters, setQuery, addFilter, removeLastFilter, removeFilter } = useCommandPalette(); const inputRef = useRef(null); useEffect(() => { inputRef.current?.focus(); }, []); function handleChange(value: string) { // Check if user typed a filter prefix like "status:failed " const parsed = parseFilterPrefix(value); if (parsed) { addFilter(parsed.filter); setQuery(parsed.remaining); return; } const trailing = checkTrailingFilter(value); if (trailing) { addFilter(trailing); setQuery(''); return; } setQuery(value); } function handleKeyDown(e: React.KeyboardEvent) { if (e.key === 'Backspace' && query === '' && filters.length > 0) { e.preventDefault(); removeLastFilter(); } } return (
{filters.length > 0 && (
{filters.map((f, i) => ( {f.key}: {f.value} ))}
)} handleChange(e.target.value)} onKeyDown={handleKeyDown} placeholder={filters.length > 0 ? 'Refine search...' : 'Search executions, agents...'} />
esc close
); }