diff --git a/resources/js/components/dashboard/account-balance-card.tsx b/resources/js/components/dashboard/account-balance-card.tsx index 73568ab4..4e2f1c42 100644 --- a/resources/js/components/dashboard/account-balance-card.tsx +++ b/resources/js/components/dashboard/account-balance-card.tsx @@ -1,9 +1,9 @@ import { EncryptedText } from '@/components/encrypted-text'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Account } from '@/types/account'; -import { AmountTrendIndicator } from './amount-trend-indicator'; -import { AccountTypeIcon } from './account-type-icon'; import { Line, LineChart, ResponsiveContainer, Tooltip } from 'recharts'; +import { AccountTypeIcon } from './account-type-icon'; +import { AmountTrendIndicator } from './amount-trend-indicator'; interface AccountBalanceCardProps { account: Account & { @@ -43,8 +43,14 @@ export function AccountBalanceCard({ return ( - - {account.bank.logo && {account.bank.name}} + + {account.bank.logo && ( + {account.bank.name} + )}
- +
-
-
+
+
{formatter.format(account.currentBalance / 100)}
-
+
= { - checking: Building2, // 🏦 - bank / institution + checking: Building2, // 🏦 - bank / institution credit_card: CreditCard, // 💳 - card - loan: Landmark, // 🏠 - "institution/loan", or use Home if it's a mortgage - savings: PiggyBank, // 💰 - savings - others: FolderKanban, // 📁 - miscellaneous/other + loan: Landmark, // 🏠 - "institution/loan", or use Home if it's a mortgage + savings: PiggyBank, // 💰 - savings + others: FolderKanban, // 📁 - miscellaneous/other }; const Icon = typeMap[type] || BadgeQuestionMarkIcon; - return ; + return ( + + ); } diff --git a/resources/js/components/dashboard/amount-trend-indicator.tsx b/resources/js/components/dashboard/amount-trend-indicator.tsx index e288a6c3..ab41a761 100644 --- a/resources/js/components/dashboard/amount-trend-indicator.tsx +++ b/resources/js/components/dashboard/amount-trend-indicator.tsx @@ -1,5 +1,5 @@ -import { cn } from "@/lib/utils"; -import { TrendingUp, TrendingDown } from "lucide-react"; +import { cn } from '@/lib/utils'; +import { TrendingDown, TrendingUp } from 'lucide-react'; export function AmountTrendIndicator({ trend, @@ -20,10 +20,7 @@ export function AmountTrendIndicator({ : 'text-red-600/70 dark:text-red-400/70'; return ( -
+
{ - if (!previous) return undefined; - const previousNet = previous.income - previous.expense; - if (previousNet === 0) return undefined; - - const diff = currentNet - previousNet; - const percentage = (diff / Math.abs(previousNet)) * 100; - - return { - value: percentage, - label: 'from previous period', - }; - }; - - return ( - - ); -} diff --git a/resources/js/components/dashboard/net-worth-card.tsx b/resources/js/components/dashboard/net-worth-card.tsx deleted file mode 100644 index 45273682..00000000 --- a/resources/js/components/dashboard/net-worth-card.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { StatCard } from '@/components/dashboard/stat-card'; -import { WalletIcon } from 'lucide-react'; - -interface NetWorthCardProps { - current: number; - previous: number; - loading?: boolean; -} - -export function NetWorthCard({ - current, - previous, - loading, -}: NetWorthCardProps) { - const formatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', - minimumFractionDigits: 0, - maximumFractionDigits: 0, - }); - - const calculateTrend = () => { - if (!previous) return undefined; - const diff = current - previous; - const percentage = (diff / previous) * 100; - - return { - value: percentage, - label: 'from previous period', - }; - }; - - return ( - - ); -} diff --git a/resources/js/components/dashboard/percentage-trend-indicator.tsx b/resources/js/components/dashboard/percentage-trend-indicator.tsx index b3bae525..89ecbb6b 100644 --- a/resources/js/components/dashboard/percentage-trend-indicator.tsx +++ b/resources/js/components/dashboard/percentage-trend-indicator.tsx @@ -1,4 +1,4 @@ -import { TrendingUp, TrendingDown } from "lucide-react"; +import { TrendingDown, TrendingUp } from 'lucide-react'; export function PercentageTrendIndicator({ trend, diff --git a/resources/js/components/dashboard/spending-summary-card.tsx b/resources/js/components/dashboard/spending-summary-card.tsx deleted file mode 100644 index 85ffe74b..00000000 --- a/resources/js/components/dashboard/spending-summary-card.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { StatCard } from '@/components/dashboard/stat-card'; -import { CreditCardIcon } from 'lucide-react'; - -interface SpendingSummaryCardProps { - current: number; - previous?: number; - loading?: boolean; -} - -export function SpendingSummaryCard({ - current, - previous, - loading, -}: SpendingSummaryCardProps) { - const formatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', - minimumFractionDigits: 0, - maximumFractionDigits: 0, - }); - - const calculateTrend = () => { - if (!previous) return undefined; - const diff = current - previous; - const percentage = (diff / previous) * 100; - - return { - value: percentage, - label: 'from previous period', - }; - }; - - return ( - - ); -} diff --git a/resources/js/hooks/use-dashboard-data.ts b/resources/js/hooks/use-dashboard-data.ts index aa624c8e..0fc31e49 100644 --- a/resources/js/hooks/use-dashboard-data.ts +++ b/resources/js/hooks/use-dashboard-data.ts @@ -17,24 +17,6 @@ export interface NetWorthEvolutionData { } export interface DashboardData { - netWorth: { - current: number; - previous: number; - diff: number; - }; - monthlySpending: { - current: number; - limit: null; - previous: number; - }; - cashFlow: { - income: number; - expense: number; - previous: { - income: number; - expense: number; - }; - }; netWorthEvolution: NetWorthEvolutionData; accounts: Array< Account & { @@ -52,13 +34,6 @@ export interface DashboardData { export function useDashboardData(): DashboardData { const [data, setData] = useState>({ - netWorth: { current: 0, previous: 0, diff: 0 }, - monthlySpending: { current: 0, limit: null, previous: 0 }, - cashFlow: { - income: 0, - expense: 0, - previous: { income: 0, expense: 0 }, - }, netWorthEvolution: { data: [], accounts: {} }, accounts: [], topCategories: [], @@ -72,7 +47,6 @@ export function useDashboardData(): DashboardData { const now = new Date(); const to = format(now, 'yyyy-MM-dd'); - // Last 12 months for evolution charts const from12Months = format(subMonths(now, 12), 'yyyy-MM-dd'); const params12Months = new URLSearchParams({ from: from12Months, @@ -80,7 +54,6 @@ export function useDashboardData(): DashboardData { }); const query12Months = `?${params12Months.toString()}`; - // Last 30 days for top blocks and categories const from30Days = format(subDays(now, 30), 'yyyy-MM-dd'); const params30Days = new URLSearchParams({ from: from30Days, @@ -88,50 +61,20 @@ export function useDashboardData(): DashboardData { }); const query30Days = `?${params30Days.toString()}`; - const [ - netWorth, - monthlySpending, - cashFlow, - netWorthEvolution, - accountBalances, - topCategories, - ] = await Promise.all([ - fetch(`/api/dashboard/net-worth${query30Days}`).then((r) => - r.json(), - ), - fetch(`/api/dashboard/monthly-spending${query30Days}`).then( - (r) => r.json(), - ), - fetch(`/api/dashboard/cash-flow${query30Days}`).then((r) => - r.json(), - ), - fetch( - `/api/dashboard/net-worth-evolution${query12Months}`, - ).then((r) => r.json()), - fetch( - `/api/dashboard/account-balances${query12Months}`, - ).then((r) => r.json()), - fetch(`/api/dashboard/top-categories${query30Days}`).then( - (r) => r.json(), - ), - ]); + const [netWorthEvolution, accountBalances, topCategories] = + await Promise.all([ + fetch( + `/api/dashboard/net-worth-evolution${query12Months}`, + ).then((r) => r.json()), + fetch( + `/api/dashboard/account-balances${query12Months}`, + ).then((r) => r.json()), + fetch( + `/api/dashboard/top-categories${query30Days}`, + ).then((r) => r.json()), + ]); setData({ - netWorth: { - current: netWorth.current, - previous: netWorth.previous, - diff: netWorth.current - netWorth.previous, - }, - monthlySpending: { - current: monthlySpending.current, - previous: monthlySpending.previous, - limit: null, - }, - cashFlow: { - income: cashFlow.current.income, - expense: cashFlow.current.expense, - previous: cashFlow.previous, - }, netWorthEvolution: netWorthEvolution as NetWorthEvolutionData, accounts: accountBalances.map( diff --git a/resources/js/pages/dashboard.tsx b/resources/js/pages/dashboard.tsx index 228ef9c2..2f64ead0 100644 --- a/resources/js/pages/dashboard.tsx +++ b/resources/js/pages/dashboard.tsx @@ -1,8 +1,5 @@ import { AccountBalanceCard } from '@/components/dashboard/account-balance-card'; -import { CashFlowCard } from '@/components/dashboard/cash-flow-card'; -import { NetWorthCard } from '@/components/dashboard/net-worth-card'; import { NetWorthChart as NetWorthChartComponent } from '@/components/dashboard/net-worth-chart'; -import { SpendingSummaryCard } from '@/components/dashboard/spending-summary-card'; import { TopCategoriesCard } from '@/components/dashboard/top-categories-card'; import HeadingSmall from '@/components/heading-small'; import { useDashboardData } from '@/hooks/use-dashboard-data'; @@ -20,9 +17,6 @@ const breadcrumbs: BreadcrumbItem[] = [ export default function Dashboard() { const { - netWorth, - monthlySpending, - cashFlow, netWorthEvolution, accounts: accountMetrics, topCategories, @@ -39,25 +33,6 @@ export default function Dashboard() { description="Overview of your financial health" /> -
- - - -
-