Fix: Bug when creating new expense

The AI will investigate and fix a bug that occurs when the "Nova Despesa" button is pressed in production.
This commit is contained in:
gpt-engineer-app[bot] 2025-06-06 18:44:28 +00:00
parent 7d0dc19eb9
commit 3cc9ca31c8
3 changed files with 38 additions and 25 deletions

View File

@ -43,7 +43,7 @@ export function TransactionForm({
// Fetch user groups when the form loads // Fetch user groups when the form loads
useEffect(() => { useEffect(() => {
fetchGrupos(); fetchGrupos();
}, []); }, [fetchGrupos]);
return ( return (
<Form {...form}> <Form {...form}>

View File

@ -40,7 +40,11 @@ export const TransactionDialogs = ({
return ( return (
<> <>
{/* Dialog para transações */} {/* Dialog para transações */}
<Dialog open={isDialogOpen} onOpenChange={onCloseDialog}> <Dialog open={isDialogOpen} onOpenChange={(open) => {
if (!open) {
onCloseDialog();
}
}}>
<DialogContent className="sm:max-w-[500px]"> <DialogContent className="sm:max-w-[500px]">
<DialogHeader> <DialogHeader>
<DialogTitle> <DialogTitle>
@ -67,7 +71,11 @@ export const TransactionDialogs = ({
</Dialog> </Dialog>
{/* Dialog para despesas de cartão */} {/* Dialog para despesas de cartão */}
<Dialog open={isCartaoCreditoDialogOpen} onOpenChange={onCloseCartaoCreditoDialog}> <Dialog open={isCartaoCreditoDialogOpen} onOpenChange={(open) => {
if (!open) {
onCloseCartaoCreditoDialog();
}
}}>
<DialogContent className="sm:max-w-[500px]"> <DialogContent className="sm:max-w-[500px]">
<DialogHeader> <DialogHeader>
<DialogTitle>Nova Despesa de Cartão</DialogTitle> <DialogTitle>Nova Despesa de Cartão</DialogTitle>

View File

@ -1,4 +1,5 @@
import { useState } from 'react';
import { useState, useCallback } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import * as z from 'zod'; import * as z from 'zod';
@ -31,26 +32,30 @@ export const useTransactionForm = (
const { toast } = useToast(); const { toast } = useToast();
// Fetch user groups when the form loads // Fetch user groups when the form loads
const fetchGrupos = async () => { const fetchGrupos = useCallback(async () => {
const userEmail = localStorage.getItem('userEmail'); try {
if (!userEmail) { const userEmail = localStorage.getItem('userEmail');
console.error('Email do usuário não encontrado'); if (!userEmail) {
return; console.error('Email do usuário não encontrado');
} return;
}
const normalizedEmail = userEmail.trim().toLowerCase(); const normalizedEmail = userEmail.trim().toLowerCase();
const { data, error } = await supabase const { data, error } = await supabase
.from('grupos_whatsapp') .from('grupos_whatsapp')
.select('remote_jid, nome_grupo') .select('remote_jid, nome_grupo')
.eq('login', normalizedEmail); .eq('login', normalizedEmail);
if (error) { if (error) {
console.error('Erro ao buscar grupos:', error);
} else if (data) {
setGrupos(data);
}
} catch (error) {
console.error('Erro ao buscar grupos:', error); console.error('Erro ao buscar grupos:', error);
} else if (data) {
setGrupos(data);
} }
}; }, []);
// Set up form with default values or transaction data if editing // Set up form with default values or transaction data if editing
const form = useForm<TransactionFormValues>({ const form = useForm<TransactionFormValues>({
@ -68,7 +73,7 @@ export const useTransactionForm = (
} }
}); });
async function onSubmit(data: TransactionFormValues) { const onSubmit = async (data: TransactionFormValues) => {
setIsSubmitting(true); setIsSubmitting(true);
try { try {
@ -92,10 +97,10 @@ export const useTransactionForm = (
const valorNumerico = parseFloat(data.valor.replace(',', '.')); const valorNumerico = parseFloat(data.valor.replace(',', '.'));
if (isNaN(valorNumerico)) { if (isNaN(valorNumerico) || valorNumerico <= 0) {
toast({ toast({
title: "Erro no formulário", title: "Erro no formulário",
description: "O valor precisa ser um número válido", description: "O valor precisa ser um número válido e maior que zero",
variant: "destructive" variant: "destructive"
}); });
return; return;
@ -176,7 +181,7 @@ export const useTransactionForm = (
} finally { } finally {
setIsSubmitting(false); setIsSubmitting(false);
} }
} };
return { return {
form, form,