import { createFileRoute } from "@tanstack/react-router"; import { useQuery } from "@tanstack/react-query"; import { CreditCard, TrendingUp, TrendingDown, DollarSign, Activity, Users, } from "lucide-react"; import apiClient from "../lib/api"; import StatCard from "../components/analytics/StatCard"; import BalanceChart from "../components/analytics/BalanceChart"; import TransactionDistribution from "../components/analytics/TransactionDistribution"; import MonthlyTrends from "../components/analytics/MonthlyTrends"; function AnalyticsDashboard() { // Fetch analytics data const { data: stats, isLoading: statsLoading } = useQuery({ queryKey: ["transaction-stats"], queryFn: () => apiClient.getTransactionStats(365), // Last year }); const { data: accounts, isLoading: accountsLoading } = useQuery({ queryKey: ["accounts"], queryFn: () => apiClient.getAccounts(), }); const { data: balances, isLoading: balancesLoading } = useQuery({ queryKey: ["balances"], queryFn: () => apiClient.getBalances(), }); const isLoading = statsLoading || accountsLoading || balancesLoading; if (isLoading) { return (
{[...Array(4)].map((_, i) => (
))}
); } const totalBalance = accounts?.reduce((sum, account) => { const closingBalance = account.balances.find( (balance) => balance.balance_type === "closingBooked" ); return sum + (closingBalance?.amount || 0); }, 0) || 0; return (

Analytics Dashboard

Overview of your financial data and spending patterns

{/* Stats Cards */}
{/* Additional Stats */}
= 0 ? "border-green-200" : "border-red-200" } />
{/* Charts */}
{/* Monthly Trends */}
{/* Summary Section */} {stats && (

Period Summary ({stats.period_days} days)

Booked Transactions

{stats.booked_transactions}

Pending Transactions

{stats.pending_transactions}

Transaction Ratio

{stats.total_transactions > 0 ? `${Math.round( (stats.booked_transactions / stats.total_transactions) * 100 )}% booked` : "No transactions"}

Spend Rate

€{((stats.total_expenses || 0) / stats.period_days).toFixed(2)}/day

)}
); } export const Route = createFileRoute("/analytics")({ component: AnalyticsDashboard, });