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...
Access annual financial reports and stay informed about LOAF's fiscal responsibility.
{/* Filters */}No financial reports found
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.