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 { FileText, ExternalLink, Calendar, Search } from 'lucide-react'; export default function NewsletterArchive() { const [newsletters, setNewsletters] = useState([]); const [years, setYears] = useState([]); const [selectedYear, setSelectedYear] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [loading, setLoading] = useState(true); useEffect(() => { fetchYears(); fetchNewsletters(); }, []); const fetchYears = async () => { try { const response = await api.get('/newsletters/years'); setYears(response.data); } catch (error) { console.error('Failed to load years'); } }; const fetchNewsletters = async (year = null) => { try { setLoading(true); const url = year ? `/newsletters?year=${year}` : '/newsletters'; const response = await api.get(url); setNewsletters(response.data); } catch (error) { toast.error('Failed to load newsletters'); } finally { setLoading(false); } }; const handleYearFilter = (year) => { setSelectedYear(year); fetchNewsletters(year); }; const clearFilter = () => { setSelectedYear(null); fetchNewsletters(); }; const filteredNewsletters = newsletters.filter(newsletter => newsletter.title.toLowerCase().includes(searchTerm.toLowerCase()) || (newsletter.description && newsletter.description.toLowerCase().includes(searchTerm.toLowerCase())) ); const formatDate = (dateString) => { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); }; const groupByYear = (newsletters) => { const grouped = {}; newsletters.forEach(newsletter => { const year = new Date(newsletter.published_date).getFullYear(); if (!grouped[year]) { grouped[year] = []; } grouped[year].push(newsletter); }); return grouped; }; const groupedNewsletters = groupByYear(filteredNewsletters); const sortedYears = Object.keys(groupedNewsletters).sort((a, b) => b - a); if (loading) { return (
Loading newsletters...
Browse past monthly newsletters and stay informed about LOAF community updates.
{/* Filters */}No newsletters found
{newsletter.description}
)}