import React, { useState, useEffect } from 'react'; import api from '../../utils/api'; import Navbar from '../../components/Navbar'; import MemberFooter from '../../components/MemberFooter'; import { Card } from '../../components/ui/card'; import { Button } from '../../components/ui/button'; import { Badge } from '../../components/ui/badge'; import { Input } from '../../components/ui/input'; import { toast } from 'sonner'; import { DollarSign, ExternalLink, TrendingUp, Search, Calendar } from 'lucide-react'; export default function Financials() { const [reports, setReports] = useState([]); const [years, setYears] = useState([]); const [selectedYear, setSelectedYear] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { fetchYears(); fetchReports(); }, []); const fetchYears = async () => { try { const response = await api.get('/financials/years'); setYears(response.data); } catch (error) { console.error('Failed to load years'); } }; const fetchReports = async (year = null) => { try { setLoading(true); const url = year ? `/financials?year=${year}` : '/financials'; const response = await api.get(url); setReports(response.data); } catch (error) { toast.error('Failed to load financial reports'); } finally { setLoading(false); } }; const handleYearFilter = (year) => { setSelectedYear(year); fetchReports(year); }; const clearFilter = () => { setSelectedYear(null); fetchReports(); }; const filteredReports = reports.filter(report => report.title.toLowerCase().includes(searchTerm.toLowerCase()) || report.year.toString().includes(searchTerm) ); const groupByYear = (items) => { const grouped = {}; items.forEach(item => { const year = item.year; if (!grouped[year]) { grouped[year] = []; } grouped[year].push(item); }); return grouped; }; const groupedReports = groupByYear(filteredReports); const sortedYears = Object.keys(groupedReports).sort((a, b) => b - a); if (loading) { return (

Loading financial reports...

); } return (
{/* Header */}

Financial Reports

Access annual financial reports and stay informed about LOAF's fiscal responsibility.

{/* Filters */}
{/* Search */}
setSearchTerm(e.target.value)} className="pl-10 border-[var(--neutral-800)] focus:border-brand-purple " />
{/* Year Filter */}
{years.map(year => ( ))}
{/* Reports List */} {filteredReports.length === 0 ? (

No financial reports found

) : (
{sortedYears.map(year => (

{year}

{groupedReports[year].map(report => (
{/* Year Badge */}
{/* Report Details */}

{report.title}

{report.document_type === 'google_drive' ? 'Google Drive' : report.document_type.toUpperCase()}
))}
))}
)} {/* Transparency Note */} {filteredReports.length > 0 && (

Transparency & Accountability

LOAF is committed to financial transparency. These reports provide detailed information about our revenue, expenses, and how member contributions support our community programs and operations.

)}
); }