import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import api from '@/services/api' import type { Proposal, Project } from '@/types' import dayjs from 'dayjs' export default function ProposalsPage() { const [proposals, setProposals] = useState([]) const [projects, setProjects] = useState([]) const [projectFilter, setProjectFilter] = useState('') const [showCreate, setShowCreate] = useState(false) const [newTitle, setNewTitle] = useState('') const [newDesc, setNewDesc] = useState('') const [creating, setCreating] = useState(false) const navigate = useNavigate() const fetchProposals = () => { if (!projectFilter) { setProposals([]) return } api.get(`/projects/${projectFilter}/proposals`).then(({ data }) => setProposals(data)) } useEffect(() => { api.get('/projects').then(({ data }) => setProjects(data)) }, []) useEffect(() => { fetchProposals() }, [projectFilter]) const handleCreate = async () => { if (!newTitle.trim() || !projectFilter) return setCreating(true) try { await api.post(`/projects/${projectFilter}/proposals`, { title: newTitle.trim(), description: newDesc.trim() || null, }) setNewTitle('') setNewDesc('') setShowCreate(false) fetchProposals() } finally { setCreating(false) } } const statusBadgeClass = (s: string) => { if (s === 'open') return 'status-open' if (s === 'accepted') return 'status-completed' if (s === 'rejected') return 'status-closed' return '' } return (

💡 Proposals ({proposals.length})

{!projectFilter &&

Please select a project to view proposals.

}
{proposals.map((pr) => (
pr.proposal_code && pr.project_code && navigate(`/proposals/${pr.proposal_code}?project_code=${pr.project_code}`)}>
{pr.status} {pr.proposal_code && {pr.proposal_code}}

{pr.title}

{pr.description || 'No description'}

Created {dayjs(pr.created_at).format('YYYY-MM-DD')}
))} {projectFilter && proposals.length === 0 &&

No proposals

}
{showCreate && (
setShowCreate(false)}>
e.stopPropagation()}>

New Proposal

setNewTitle(e.target.value)} placeholder="Proposal title" />