import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; interface MinuteEntry { date: string; meetingType: string; location: string; fileUrl: string; } const minutesData: MinuteEntry[] = [ { date: '01/11/2025', meetingType: 'Board Meeting', location: 'Black Coffee Roasting Company', fileUrl: '/minutes/minutes-01112025.pdf', }, { date: '03/08/2025', meetingType: 'Board Meeting', location: 'The Break Espresso', fileUrl: '/minutes/minutes-03082025.pdf', }, { date: '02/08/2025', meetingType: 'Board Meeting', location: 'Book Exchange - Liquid Planet', fileUrl: '/minutes/minutes-02082025.pdf', }, { date: '10/17/2024', meetingType: 'Board Meeting', location: 'UC Market (University)', fileUrl: '/minutes/minutes-10172024.pdf', }, { date: '09/14/2024', meetingType: 'Membership Meeting', location: 'Dog Wash Cafe', fileUrl: '/minutes/minutes-09142024.pdf', }, { date: '08/06/2024', meetingType: 'Membership Meeting', location: 'The Break Espresso', fileUrl: '/minutes/minutes-08062024.pdf', }, ]; const Minutes: React.FC = () => { const [sortColumn, setSortColumn] = useState('date'); const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc'); const [selectedMinutes, setSelectedMinutes] = useState(null); const [isMobile, setIsMobile] = useState(false); useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth < 768); }; checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); const sortedMinutes = [...minutesData].sort((a, b) => { if (sortColumn === 'date') { // Convert date strings to Date objects for proper comparison const dateA = new Date(a.date.split('/').map((part, i) => i === 0 ? part : i === 1 ? part : part).join('/')); const dateB = new Date(b.date.split('/').map((part, i) => i === 0 ? part : i === 1 ? part : part).join('/')); return sortDirection === 'asc' ? dateA.getTime() - dateB.getTime() : dateB.getTime() - dateA.getTime(); } else { if (a[sortColumn] < b[sortColumn]) return sortDirection === 'asc' ? -1 : 1; if (a[sortColumn] > b[sortColumn]) return sortDirection === 'asc' ? 1 : -1; return 0; } }); const handleSort = (column: keyof MinuteEntry) => { if (column === sortColumn) { setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc'); } else { setSortColumn(column); setSortDirection('asc'); } }; const handleMinutesClick = (entry: MinuteEntry) => { if (isMobile) { window.open(entry.fileUrl, '_blank'); } else { setSelectedMinutes(entry); } }; const closePopup = () => { setSelectedMinutes(null); }; return (

Meeting Minutes

{sortedMinutes.map((entry, index) => ( ))}
handleSort('date')}> Date {sortColumn === 'date' && {sortDirection === 'asc' ? '▲' : '▼'}} handleSort('meetingType')}> Meeting Type {sortColumn === 'meetingType' && {sortDirection === 'asc' ? '▲' : '▼'}} handleSort('location')}> Location {sortColumn === 'location' && {sortDirection === 'asc' ? '▲' : '▼'}} Minutes
{entry.date} {entry.meetingType} {entry.location}
{selectedMinutes && !isMobile && ( e.stopPropagation()} >

{selectedMinutes.meetingType} - {selectedMinutes.date}