'use client' import { useState, useTransition } from 'react' import { useRouter } from 'next/navigation' import { castVote, decideProposal, openProposal, withdrawProposal, } from '@/lib/actions' import type { ProposalStatus, ProposalVote, VotePosition } from '@/lib/types' import { votePositions } from '@/lib/validations' type Props = { proposalId: string status: ProposalStatus isAdminOrBoard: boolean isProposer: boolean votingOpen: boolean myVote: ProposalVote | null } export function ProposalActions({ proposalId, status, isAdminOrBoard, isProposer, votingOpen, myVote, }: Props) { const router = useRouter() const [isPending, startTransition] = useTransition() const [error, setError] = useState('') // Voting form state const [position, setPosition] = useState(myVote?.position ?? 'yes') const [recusalReason, setRecusalReason] = useState(myVote?.recusal_reason ?? '') const [comment, setComment] = useState(myVote?.comment ?? '') function run(fn: () => Promise) { setError('') startTransition(async () => { const r = (await fn()) as unknown as { error?: string } if (r && r.error) setError(r.error) router.refresh() }) } return (
{votingOpen && (

{myVote ? 'Update your vote' : 'Cast your vote'}

{votePositions.map(p => ( ))}
{position === 'recused' && (