'use client'; import { useRouter, useSearchParams } from 'next/navigation'; import { useState, useEffect } from 'react'; interface Props { interests: Array<{ name: string; count: number }>; } export function DirectorySearch({ interests }: Props) { const router = useRouter(); const searchParams = useSearchParams(); const activeInterest = searchParams.get('interest'); const [q, setQ] = useState(searchParams.get('q') ?? ''); // Debounced push of the search term into the URL. useEffect(() => { const handle = setTimeout(() => { const params = new URLSearchParams(searchParams.toString()); if (q.trim()) params.set('q', q.trim()); else params.delete('q'); router.replace(`/my/directory${params.toString() ? `?${params.toString()}` : ''}`); }, 300); return () => clearTimeout(handle); // eslint-disable-next-line react-hooks/exhaustive-deps }, [q]); const toggleInterest = (name: string) => { const params = new URLSearchParams(searchParams.toString()); if (activeInterest === name) params.delete('interest'); else params.set('interest', name); router.replace(`/my/directory${params.toString() ? `?${params.toString()}` : ''}`); }; return (