import { ChevronDown, Search } from 'lucide-react'; import { useMemo, useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import type { HistoryResponse } from '@/lib/api/types'; import { useHistory } from '@/lib/hooks/useHistory'; import { cn } from '@/lib/utils/cn'; interface GenerationPickerProps { selectedId: string | null; onSelect: (generation: HistoryResponse) => void; className?: string; } export function GenerationPicker({ selectedId, onSelect, className }: GenerationPickerProps) { const [open, setOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(''); const { data: historyData } = useHistory({ limit: 50 }); const completedGenerations = useMemo(() => { if (!historyData?.items) return []; return historyData.items.filter((gen) => gen.status === 'completed'); }, [historyData]); const filtered = useMemo(() => { if (!searchQuery) return completedGenerations; const q = searchQuery.toLowerCase(); return completedGenerations.filter( (gen) => gen.text.toLowerCase().includes(q) || gen.profile_name.toLowerCase().includes(q), ); }, [completedGenerations, searchQuery]); const selectedGeneration = completedGenerations.find((g) => g.id === selectedId); return (
setSearchQuery(e.target.value)} className="h-8 pl-7 text-xs" />
{filtered.length === 0 ? (
No generations found
) : ( filtered.map((gen) => ( )) )}
); }