'use client' import { useActionState } from 'react' import { Alert, AlertDescription } from '@/components/ui/Alert' import { Button } from '@/components/ui/button' import { Field, FieldError, FieldLabel } from '@/components/ui/field' import { Input } from '@/components/ui/input' import { Spinner } from '@/components/ui/Spinner' import { Textarea } from '@/components/ui/textarea' import { campaignDemandTransitionLabels, campaignDemandTransitions, type CampaignDemandStatus, } from '@/lib/schemas/campaignDemand' import type { CampaignFormActionState } from '@/utilities/campaignFormActionError' import { fieldError } from '@/utilities/campaignFormFields' type FormAction = ( state: CampaignFormActionState, formData: FormData, ) => Promise type DemandWorkflowCardProps = { demandID: number status: CampaignDemandStatus isCoordinator: boolean currentCost: number | null transitionFormAction: FormAction costFormAction: FormAction receiptFormAction: FormAction } const transitionVariant = (target: CampaignDemandStatus) => target === 'aprovada' ? 'default' : target === 'rejeitada' ? 'destructive' : 'secondary' /** Staff-only workflow: analysis, escalation, decision, cost and receipts. */ export const DemandWorkflowCard = ({ demandID, status, isCoordinator, currentCost, transitionFormAction, costFormAction, receiptFormAction, }: DemandWorkflowCardProps) => { const [transitionState, submitTransition, transitionPending] = useActionState( transitionFormAction, {}, ) const [costState, submitCost, costPending] = useActionState(costFormAction, {}) const [receiptState, submitReceipt, receiptPending] = useActionState(receiptFormAction, {}) const availableTransitions = campaignDemandTransitions[status].filter( (target) => isCoordinator || status !== 'escalada' || (target !== 'aprovada' && target !== 'rejeitada'), ) return (

Tratar demanda

O assessor analisa e decide — ou escala ao Coordenador Geral. Demandas escaladas são decididas somente por ele.

{availableTransitions.length ? (
Nota da decisão