import { useState, useMemo, useRef, useEffect } from "preact/hooks"; import type { LinearIssue } from "../../lib/types"; interface Props { issues: LinearIssue[]; onSelect: (issueId: string) => void; } export default function AttachDropdown({ issues, onSelect }: Props) { const [filter, setFilter] = useState(""); const inputRef = useRef(null); useEffect(() => { inputRef.current?.focus(); }, []); const filtered = useMemo(() => { const fl = filter.toLowerCase(); return issues .filter((i) => i.bucket !== "inactive-done") .filter((i) => !fl || i.identifier.toLowerCase().includes(fl) || i.title.toLowerCase().includes(fl)) .slice(0, 10); }, [issues, filter]); return (
setFilter((e.target as HTMLInputElement).value)} />
{filtered.length === 0 ? (
No matching issues
) : ( filtered.map((i) => (
onSelect(i.identifier)}> {i.identifier} {i.title}
)) )}
); }