import { createFileRoute } from "@tanstack/react-router"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { CreditCard, TrendingUp, TrendingDown, 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"; import TimePeriodFilter from "../components/analytics/TimePeriodFilter"; import { Card, CardContent } from "../components/ui/card"; import type { TimePeriod } from "../lib/timePeriods"; import { TIME_PERIODS } from "../lib/timePeriods"; function AnalyticsDashboard() { // Default to Last 365 days const [selectedPeriod, setSelectedPeriod] = useState( TIME_PERIODS.find((p) => p.value === "365d") || TIME_PERIODS[3], ); // Fetch analytics data const { data: stats, isLoading: statsLoading } = useQuery({ queryKey: ["transaction-stats", selectedPeriod.days], queryFn: () => apiClient.getTransactionStats(selectedPeriod.days), }); const { data: accounts, isLoading: accountsLoading } = useQuery({ queryKey: ["accounts"], queryFn: () => apiClient.getAccounts(), }); const { data: balances, isLoading: balancesLoading } = useQuery({ queryKey: ["historical-balances", selectedPeriod.days], queryFn: () => apiClient.getHistoricalBalances(selectedPeriod.days), }); const isLoading = statsLoading || accountsLoading || balancesLoading; if (isLoading) { return (
{[...Array(3)].map((_, i) => (
))}
); } return (
{/* Time Period Filter */} {/* Stats Cards */}
{/* Additional Stats */}
= 0 ? "green" : "red"} shouldBlur={true} />
{/* Charts */}
{/* Monthly Trends */}
); } export const Route = createFileRoute("/analytics")({ component: AnalyticsDashboard, });