import { useState, useEffect } from 'react' import { useQuery } from '@tanstack/react-query' import { useSearchParams } from 'react-router-dom' import { MagnifyingGlassIcon } from '@heroicons/react/24/outline' import api from '../lib/api' interface Document { id: string state: string municipality: string title: string meeting_date: string url: string topics: string[] sentiment: string } export default function Documents() { const [searchParams, setSearchParams] = useSearchParams() const [searchQuery, setSearchQuery] = useState(searchParams.get('search') || '') const [page, setPage] = useState(1) const [activeFilter, setActiveFilter] = useState('all') // all, meetings, budgets, people, organizations useEffect(() => { const searchFromUrl = searchParams.get('search') if (searchFromUrl) { setSearchQuery(searchFromUrl) } }, [searchParams]) const { data, isLoading } = useQuery({ queryKey: ['documents', searchQuery, page], queryFn: async () => { const response = await api.get('/documents', { params: { search: searchQuery, page, limit: 20 }, }) return response.data }, }) const handleSearch = (e: React.FormEvent) => { e.preventDefault() setPage(1) if (searchQuery) { setSearchParams({ search: searchQuery }) } else { setSearchParams({}) } } return (
{/* Header */}

Meeting Minutes

Search what local governments are discussing - 90,000+ cities, counties, and school districts

{/* Search Bar */}
setSearchQuery(e.target.value)} />
{/* Filter Pills */}
{/* Results */}
{isLoading ? (
Loading documents...
) : ( <> {data?.documents?.map((doc: Document) => (

{doc.title}

{doc.municipality}, {doc.state} • {new Date(doc.meeting_date).toLocaleDateString()}

{doc.topics.map((topic) => ( {topic.replace(/_/g, ' ')} ))}
View Document
))} {/* Pagination */}
Page {page} of {data?.total_pages || 1}
)}
) }