diff --git a/src/app/emprestimos/emprestimos-page-client.tsx b/src/app/emprestimos/emprestimos-page-client.tsx index ba7b699..8b63966 100644 --- a/src/app/emprestimos/emprestimos-page-client.tsx +++ b/src/app/emprestimos/emprestimos-page-client.tsx @@ -343,27 +343,31 @@ export function EmprestimosPageClient() { const handleDevolver = useCallback(async () => { if (!selectedEmprestimoId || !convexUserId) return - setIsSubmitting(true) - try { - const result = await devolverEmprestimo({ - id: selectedEmprestimoId as Id<"emprestimos">, + // Fechamento otimista - fecha dialog imediatamente + const emprestimoId = selectedEmprestimoId + const observacoes = formObservacoes + setIsDevolverDialogOpen(false) + setSelectedEmprestimoId(null) + setFormObservacoes("") + + // Executa mutacao em background com toast de loading + toast.promise( + devolverEmprestimo({ + id: emprestimoId as Id<"emprestimos">, updatedBy: convexUserId as Id<"users">, - observacoes: formObservacoes || undefined, - }) - if (result.multaCalculada) { - toast.success(`Empréstimo devolvido com multa de R$ ${result.multaCalculada.toFixed(2)}.`) - } else { - toast.success("Empréstimo devolvido com sucesso.") + observacoes: observacoes || undefined, + }), + { + loading: "Registrando devolucao...", + success: (result) => { + if (result.multaCalculada) { + return `Emprestimo devolvido com multa de R$ ${result.multaCalculada.toFixed(2)}.` + } + return "Emprestimo devolvido com sucesso." + }, + error: "Falha ao registrar devolucao.", } - setIsDevolverDialogOpen(false) - setSelectedEmprestimoId(null) - setFormObservacoes("") - } catch (error) { - console.error("[emprestimos] Falha ao devolver", error) - toast.error("Falha ao registrar devolução.") - } finally { - setIsSubmitting(false) - } + ) }, [selectedEmprestimoId, convexUserId, formObservacoes, devolverEmprestimo]) const openDevolverDialog = useCallback((id: string) => { @@ -823,18 +827,9 @@ export function EmprestimosPageClient() { -