import { useState } from 'react'; import { useNavigate } from '@tanstack/react-router'; import { useDocuments } from '../api/hooks'; import { DataTable, type Column } from '../components/DataTable'; import { StatusBadge, LoadingSpinner, TickerFilter } from '../components/ui'; import type { Document } from '../api/hooks'; const STATUS_OPTIONS = ['', 'extracted', 'parsed', 'extraction_failed', 'low_quality'] as const; export function DocumentsPage() { const navigate = useNavigate(); const [ticker, setTicker] = useState(''); const [status, setStatus] = useState(''); const { data, isLoading, error } = useDocuments({ ticker: ticker || undefined, status: status || undefined, limit: 100, }); const columns: Column[] = [ { key: 'title', header: 'Title', render: (r) => {r.title ?? '—'} }, { key: 'document_type', header: 'Type' }, { key: 'source_type', header: 'Source' }, { key: 'published_at', header: 'Published', render: (r) => {r.published_at ? new Date(r.published_at).toLocaleDateString() : '—'} }, { key: 'parse_confidence', header: 'Parse Quality', render: (r) => }, { key: 'status', header: 'Status', render: (r) => }, ]; if (isLoading) return ; if (error) return
Failed to load documents
; return (

Documents

data={data ?? []} columns={columns} keyField="id" onRowClick={(row) => navigate({ to: '/documents/$id', params: { id: row.id } })} filterFn={(row, q) => { const lq = q.toLowerCase(); return (row.title ?? '').toLowerCase().includes(lq) || row.document_type.toLowerCase().includes(lq); }} />
); }