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 */}
{/* 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}
>
)}
)
}