import { useForm } from '@inertiajs/react'; import { createOperationKey } from '@/lib/operation-key'; import { button, card, input } from '@/pages/investment/shared'; type CaseState = { id: string; version: number; closed_at?: string | null }; export default function DeskCaseStateForm({ dossier, activity, disabled = false, onChanged, }: { dossier: CaseState; activity: { open_requests: number | null; open_tasks: number | null; pending_payments: number | null; } | null; disabled?: boolean; onChanged?: () => void; }) { const target = dossier.closed_at ? 'open' : 'closed'; const form = useForm({ version: dossier.version, state: target, reason: '', client_key: createOperationKey(), }); const stale = form.data.version !== dossier.version || form.data.state !== target; return (
{ event.preventDefault(); if (form.processing || stale || disabled) return; form.put(`/balcao-virtual/dossiers/${dossier.id}/estado`, { onSuccess: (page) => { const current = page.props.case as | CaseState | undefined; if ( current?.id === dossier.id && Number.isInteger(current.version) ) { form.setData('version', current.version); form.setData( 'state', current.closed_at ? 'open' : 'closed', ); form.reset('reason'); form.setData('client_key', createOperationKey()); onChanged?.(); } }, }); }} >

{target === 'closed' ? 'Encerrar dossier' : 'Reabrir dossier'}

Esta decisão pertence ao dono do dossier e fica registada com o motivo e a versão.

{target === 'closed' ? 'O encerramento deixa o dossier disponível para consulta. Mantém os estados e as pendências dos pedidos, pagamentos e tarefas.' : 'A reabertura permite continuar as operações autorizadas. Cada pedido, pagamento e tarefa mantém o seu estado e histórico.'}

Pedidos em curso: {activity?.open_requests ?? 'por confirmar'} · tarefas em curso: {activity?.open_tasks ?? 'por confirmar'} · comprovativos por conferir:{' '} {activity?.pending_payments ?? 'por confirmar'}.

{stale && (

O dossier foi actualizado. Confira o estado actual antes de confirmar.{' '}

)}