import React from "react"; import { Link, useLocation } from "@tanstack/react-router"; import { List, BarChart3, Activity, Settings, Building2, TrendingUp, ChevronDown, ChevronUp, } from "lucide-react"; import { Logo } from "./ui/logo"; import { useQuery } from "@tanstack/react-query"; import { apiClient } from "../lib/api"; import { formatCurrency } from "../lib/utils"; import { useState } from "react"; import type { Account } from "../types/api"; import { Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, useSidebar, } from "./ui/sidebar"; const navigation = [ { name: "Overview", icon: List, to: "/" }, { name: "Analytics", icon: BarChart3, to: "/analytics" }, { name: "System", icon: Activity, to: "/system" }, { name: "Settings", icon: Settings, to: "/settings" }, ]; export function AppSidebar({ ...props }: React.ComponentProps) { const location = useLocation(); const [accountsExpanded, setAccountsExpanded] = useState(false); const { isMobile, setOpenMobile } = useSidebar(); const { data: accounts } = useQuery({ queryKey: ["accounts"], queryFn: apiClient.getAccounts, }); const totalBalance = accounts?.reduce((sum, account) => { const primaryBalance = account.balances?.[0]?.amount || 0; return sum + primaryBalance; }, 0) || 0; // Handler to close mobile sidebar when navigation item is clicked const handleNavigationClick = () => { if (isMobile) { setOpenMobile(false); } }; return ( Leggen {navigation.map((item) => ( {item.name} ))} {/* Account Summary Section */} Account Summary
{/* Collapsible Header */}

{formatCurrency(totalBalance)}

{accounts?.length || 0} accounts

{/* Expanded Account Details */} {accountsExpanded && accounts && accounts.length > 0 && (
{accounts.map((account) => { const primaryBalance = account.balances?.[0]?.amount || 0; const currency = account.balances?.[0]?.currency || account.currency || "EUR"; return (

{account.display_name || account.name || "Unnamed Account"}

{formatCurrency(primaryBalance, currency)}

); })}
)}
); }