From 47e301c9bfa26fefba7cf2a666530e0d8e7a6a79 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 18:42:46 +0000 Subject: [PATCH] Refactor: Split Index.tsx into smaller components This commit refactors the `src/pages/Index.tsx` file into smaller, more manageable components to improve code organization and readability. Unused imports and files will be removed. --- src/components/dashboard/DashboardCharts.tsx | 30 ++++ src/components/dashboard/DashboardHeader.tsx | 12 ++ .../dashboard/DashboardLoadingState.tsx | 26 +++ .../dashboard/DashboardRecentTransactions.tsx | 44 +++++ .../dashboard/DashboardSummaryCards.tsx | 116 ++++++++++++ src/pages/Index.tsx | 169 +++--------------- 6 files changed, 250 insertions(+), 147 deletions(-) create mode 100644 src/components/dashboard/DashboardCharts.tsx create mode 100644 src/components/dashboard/DashboardHeader.tsx create mode 100644 src/components/dashboard/DashboardLoadingState.tsx create mode 100644 src/components/dashboard/DashboardRecentTransactions.tsx create mode 100644 src/components/dashboard/DashboardSummaryCards.tsx diff --git a/src/components/dashboard/DashboardCharts.tsx b/src/components/dashboard/DashboardCharts.tsx new file mode 100644 index 0000000..0a8a37b --- /dev/null +++ b/src/components/dashboard/DashboardCharts.tsx @@ -0,0 +1,30 @@ + +import React from 'react'; +import { CategorySummary, MonthlyData } from "@/types/financialTypes"; +import CategoryChart from "@/components/dashboard/CategoryChart"; +import MonthlyChart from "@/components/dashboard/MonthlyChart"; +import { SimpleCard } from "@/components/ui/simple-card"; + +interface DashboardChartsProps { + monthlyData: MonthlyData[]; + categories: CategorySummary[]; + isLoading: boolean; +} + +const DashboardCharts: React.FC = ({ monthlyData, categories, isLoading }) => { + return ( +
+ {/* 1. Receitas vs Despesas Chart */} + + + + + {/* 2. Gastos por Categoria */} + + + +
+ ); +}; + +export default DashboardCharts; diff --git a/src/components/dashboard/DashboardHeader.tsx b/src/components/dashboard/DashboardHeader.tsx new file mode 100644 index 0000000..db3c132 --- /dev/null +++ b/src/components/dashboard/DashboardHeader.tsx @@ -0,0 +1,12 @@ + +import React from 'react'; + +const DashboardHeader = () => { + return ( +
+

Dashboard

+
+ ); +}; + +export default DashboardHeader; diff --git a/src/components/dashboard/DashboardLoadingState.tsx b/src/components/dashboard/DashboardLoadingState.tsx new file mode 100644 index 0000000..c8ef7cd --- /dev/null +++ b/src/components/dashboard/DashboardLoadingState.tsx @@ -0,0 +1,26 @@ + +import React from 'react'; +import { Card, CardContent, CardHeader } from "@/components/ui/card"; + +const DashboardLoadingState = () => { + return ( +
+
+ {[1, 2, 3, 4].map((i) => ( + + +
+
+
+ +
+
+
+
+ ))} +
+
+ ); +}; + +export default DashboardLoadingState; diff --git a/src/components/dashboard/DashboardRecentTransactions.tsx b/src/components/dashboard/DashboardRecentTransactions.tsx new file mode 100644 index 0000000..724baf3 --- /dev/null +++ b/src/components/dashboard/DashboardRecentTransactions.tsx @@ -0,0 +1,44 @@ + +import React from 'react'; +import { Transaction } from '@/types/financialTypes'; +import TransactionsTable from "@/components/dashboard/TransactionsTable"; +import { SimpleCard } from "@/components/ui/simple-card"; +import { Button } from "@/components/ui/button"; +import { useNavigate } from 'react-router-dom'; + +interface DashboardRecentTransactionsProps { + transactions: Transaction[]; + transactionsLoading: boolean; +} + +const DashboardRecentTransactions: React.FC = ({ + transactions, + transactionsLoading +}) => { + const navigate = useNavigate(); + + return ( + +
+ {}} + onDelete={() => {}} + /> +
+ +
+
+
+ ); +}; + +export default DashboardRecentTransactions; diff --git a/src/components/dashboard/DashboardSummaryCards.tsx b/src/components/dashboard/DashboardSummaryCards.tsx new file mode 100644 index 0000000..fcfdfc4 --- /dev/null +++ b/src/components/dashboard/DashboardSummaryCards.tsx @@ -0,0 +1,116 @@ + +import React from 'react'; +import { Card, CardContent } from "@/components/ui/card"; +import { ArrowUpIcon, ArrowDownIcon, CreditCardIcon, Target } from "lucide-react"; +import { ResumoFinanceiro } from "@/types/financialTypes"; +import { useNavigateWithFilter } from "@/hooks/useNavigateWithFilter"; + +interface DashboardSummaryCardsProps { + resumo: ResumoFinanceiro | null; + formatCurrency: (value: number) => string; +} + +const DashboardSummaryCards: React.FC = ({ resumo, formatCurrency }) => { + const { navigateToTransactions } = useNavigateWithFilter(); + + const saldo = resumo ? resumo.totalReceitas - resumo.totalDespesas - (resumo.totalCartoes || 0) : 0; + const totalDespesasGeral = resumo ? resumo.totalDespesas + (resumo.totalCartoes || 0) : 0; + + return ( +
+ {/* Card Receitas - Clicável */} + navigateToTransactions('receita')} + > +
+ +
+
+ +
+
+ +5% +
+
+
+

Receitas

+

+ {resumo ? formatCurrency(resumo.totalReceitas) : 'R$ 0,00'} +

+

Clique para ver detalhes

+
+
+ + + {/* Card Despesas - Clicável */} + navigateToTransactions('despesa')} + > +
+ +
+
+ +
+
+ -2% +
+
+
+

Despesas

+

+ {resumo ? formatCurrency(totalDespesasGeral) : 'R$ 0,00'} +

+ {resumo && resumo.totalCartoes > 0 && ( +

Cartões: {formatCurrency(resumo.totalCartoes)}

+ )} +

Clique para ver detalhes

+
+
+ + + {/* Card Saldo */} + +
+ +
+
+ +
+
+
+

Saldo

+

= 0 ? 'text-blue-600' : 'text-red-600' + }`}> + {resumo ? formatCurrency(saldo) : 'R$ 0,00'} +

+
+
+ + + {/* Card Economia */} + +
+ +
+
+ +
+
+
+

Economia

+

+ -22.2% +

+

{resumo ? formatCurrency(Math.abs(saldo)) : 'R$ 0,00'}

+
+
+ +
+ ); +}; + +export default DashboardSummaryCards; diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 43f1fd7..a50a4a7 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -1,15 +1,14 @@ + import { useState, useEffect } from 'react'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { useToast } from "@/hooks/use-toast"; -import { ArrowUpIcon, ArrowDownIcon, CreditCardIcon, Target, TrendingUpIcon, TrendingDownIcon } from "lucide-react"; import { getResumoFinanceiro, getCategorySummary, getMonthlyData } from "@/services/transacao"; import { ResumoFinanceiro, CategorySummary, MonthlyData } from "@/types/financialTypes"; -import TransactionsTable from "@/components/dashboard/TransactionsTable"; import { useTransactions } from "@/hooks/useTransactions"; -import CategoryChart from "@/components/dashboard/CategoryChart"; -import MonthlyChart from "@/components/dashboard/MonthlyChart"; -import { SimpleCard } from "@/components/ui/simple-card"; -import { useNavigateWithFilter } from "@/hooks/useNavigateWithFilter"; +import DashboardHeader from "@/components/dashboard/DashboardHeader"; +import DashboardLoadingState from "@/components/dashboard/DashboardLoadingState"; +import DashboardSummaryCards from "@/components/dashboard/DashboardSummaryCards"; +import DashboardCharts from "@/components/dashboard/DashboardCharts"; +import DashboardRecentTransactions from "@/components/dashboard/DashboardRecentTransactions"; const Dashboard = () => { const [resumo, setResumo] = useState(null); @@ -17,7 +16,6 @@ const Dashboard = () => { const [monthlyData, setMonthlyData] = useState([]); const [isLoading, setIsLoading] = useState(true); const { toast } = useToast(); - const { navigateToTransactions } = useNavigateWithFilter(); const getCurrentMonth = () => { const now = new Date(); @@ -74,151 +72,28 @@ const Dashboard = () => { }, [toast]); if (isLoading) { - return ( -
-
- {[1, 2, 3, 4].map((i) => ( - - -
-
-
- -
-
-
-
- ))} -
-
- ); + return ; } - const saldo = resumo ? resumo.totalReceitas - resumo.totalDespesas - (resumo.totalCartoes || 0) : 0; - const totalDespesasGeral = resumo ? resumo.totalDespesas + (resumo.totalCartoes || 0) : 0; - return (
-
-

Dashboard

-
+ + + -
- {/* Card Receitas - Clicável */} - navigateToTransactions('receita')} - > -
- -
-
- -
-
- +5% -
-
-
-

Receitas

-

- {resumo ? formatCurrency(resumo.totalReceitas) : 'R$ 0,00'} -

-

Clique para ver detalhes

-
-
- + - {/* Card Despesas - Clicável */} - navigateToTransactions('despesa')} - > -
- -
-
- -
-
- -2% -
-
-
-

Despesas

-

- {resumo ? formatCurrency(totalDespesasGeral) : 'R$ 0,00'} -

- {resumo && resumo.totalCartoes > 0 && ( -

Cartões: {formatCurrency(resumo.totalCartoes)}

- )} -

Clique para ver detalhes

-
-
- - - {/* Card Saldo */} - -
- -
-
- -
-
-
-

Saldo

-

= 0 ? 'text-blue-600' : 'text-red-600' - }`}> - {resumo ? formatCurrency(saldo) : 'R$ 0,00'} -

-
-
- - - {/* Card Economia */} - -
- -
-
- -
-
-
-

Economia

-

- -22.2% -

-

{resumo ? formatCurrency(Math.abs(saldo)) : 'R$ 0,00'}

-
-
- -
- -
- {/* 1. Receitas vs Despesas Chart */} - - - - - {/* 2. Gastos por Categoria */} - - - - - {/* 3. Últimas Transações */} - - {}} - onDelete={() => {}} - /> - -
+
); };