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() {
-