import { useState } from 'react' import { Plus, Target } from 'lucide-react' import { Link } from 'react-router-dom' import { ToolHeader } from '../../components/ToolHeader' import { Modal, Panel } from '../../components/ui' import { slateBrand } from './brand' import { useCreateTrackedOpportunity, useTrackedOpportunities } from './captureQueries' import { fmtDeadline, inputCls, SOURCE_TYPES, STATUS_LABEL, STATUSES } from './captureConstants' const FILTERS: [string, string][] = [['', 'All'], ...STATUSES.slice(0, 6)] const chip = (on: boolean) => `rounded-full px-3 py-1 text-xs font-semibold transition ${ on ? 'bg-blue/25 text-blue shadow-[inset_0_0_0_1px_var(--color-blue)]' : 'bg-navy-900 text-faint hover:text-muted border border-line/60' }` export function Capture() { const [status, setStatus] = useState('') const [open, setOpen] = useState(false) const list = useTrackedOpportunities({ status }) const create = useCreateTrackedOpportunity() const [title, setTitle] = useState('') const [sourceType, setSourceType] = useState('manual') const [agency, setAgency] = useState('') const [solNumber, setSolNumber] = useState('') const [deadline, setDeadline] = useState('') const [primeOrSub, setPrimeOrSub] = useState('') const [newStatus, setNewStatus] = useState('identified') const submit = () => { create.mutate( { title, source_type: sourceType, agency_name: agency, solicitation_number: solNumber, response_deadline: deadline, prime_or_sub: primeOrSub, status: newStatus, }, { onSuccess: () => { setTitle('') setSourceType('manual') setAgency('') setSolNumber('') setDeadline('') setPrimeOrSub('') setNewStatus('identified') setOpen(false) }, }, ) } const rows = list.data ?? [] return (
Loading opportunities...
) : rows.length === 0 ? (No tracked opportunities yet.
Capture one from SAM.gov or enter it manually to begin the pursuit.
{o.title || 'Untitled opportunity'}
{[o.agency_name, o.solicitation_number].filter(Boolean).join(' ยท ') || 'No agency yet'}
{(create.error as Error).message}
}