import { useState, useEffect } from 'react'; import Layout from '@/components/layout/Layout'; import { Card, CardContent } from '@/components/ui/card'; import { Calendar } from "@/components/ui/calendar"; import { getTransacoes } from '@/services/transacaoService'; import { Transaction } from '@/types/financialTypes'; import { useToast } from "@/components/ui/use-toast"; import { Badge } from "@/components/ui/badge"; import { isSameDay, format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; const CalendarioPage = () => { const [transactions, setTransactions] = useState([]); const [isLoading, setIsLoading] = useState(true); const [selectedDate, setSelectedDate] = useState(new Date()); const [filteredTransactions, setFilteredTransactions] = useState([]); const { toast } = useToast(); useEffect(() => { async function loadTransactions() { try { setIsLoading(true); console.log("Carregando transações para o calendário..."); const data = await getTransacoes(); console.log(`${data.length} transações carregadas para o calendário`); setTransactions(data); } catch (error) { console.error("Erro ao carregar transações:", error); toast({ title: "Erro ao carregar transações", description: "Não foi possível obter os dados do Supabase", variant: "destructive" }); } finally { setIsLoading(false); } } loadTransactions(); }, [toast]); useEffect(() => { if (selectedDate && transactions.length > 0) { const filtered = transactions.filter(transaction => isSameDay(new Date(transaction.quando), selectedDate) ); setFilteredTransactions(filtered); } else { setFilteredTransactions([]); } }, [selectedDate, transactions]); const formatCurrency = (value: number) => { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL', }).format(value); }; // Função para verificar se um dia tem transações const hasDayTransaction = (date: Date) => { return transactions.some(transaction => isSameDay(new Date(transaction.quando), date) ); }; return (

Calendário de Transações

hasDayTransaction(date), }} modifiersStyles={{ hasTransaction: { fontWeight: "bold", textDecoration: "underline", backgroundColor: "rgba(16, 185, 129, 0.1)" } }} />
Dias com transações estão destacados

{selectedDate ? format(selectedDate, "dd 'de' MMMM 'de' yyyy", { locale: ptBR }) : "Selecione uma data"}

{isLoading ? (
{[1, 2, 3].map((i) => (
))}
) : filteredTransactions.length === 0 ? (
Nenhuma transação nesta data
) : (
{filteredTransactions.map((transaction) => (
{transaction.estabelecimento}
{transaction.tipo === 'entrada' ? 'Receita' : 'Despesa'}
{transaction.detalhes}
{transaction.categoria} {transaction.tipo === 'entrada' ? '+' : '-'}{formatCurrency(Math.abs(transaction.valor))}
))}
)}
); }; export default CalendarioPage;