@@ -5,6 +5,7 @@ import { useOfficersFa25 } from "@/hooks/useOfficersFa25";
55import { OfficerCard } from "@/components/OfficerCard" ;
66import { Alert , AlertDescription } from "@/components/ui/alert" ;
77import { Accordion , AccordionContent , AccordionItem , AccordionTrigger } from "@/components/ui/accordion" ;
8+ import { Tabs , TabsContent , TabsList , TabsTrigger } from "@/components/ui/tabs" ;
89
910const Officers = ( ) => {
1011 const { officers, loading, error } = useOfficers ( ) ; // Current officers from Notion (SP26+)
@@ -55,14 +56,56 @@ const Officers = () => {
5556 </ p >
5657 </ div >
5758
58- { /* Current semester officers */ }
59- < div className = "flex flex-wrap justify-center gap-6" >
60- { officers . map ( ( officer , index ) => (
61- < div key = { index } className = "w-full sm:w-[calc(50%-0.75rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1.125rem)]" >
62- < OfficerCard officer = { officer } />
59+ < Tabs defaultValue = "current" className = "w-full" >
60+ < TabsList className = "grid w-full max-w-md mx-auto grid-cols-2 mb-8" >
61+ < TabsTrigger value = "current" > Spring 2026</ TabsTrigger >
62+ < TabsTrigger value = "previous" > Previous Semesters</ TabsTrigger >
63+ </ TabsList >
64+
65+ < TabsContent value = "current" className = "mt-0" >
66+ < div className = "flex flex-wrap justify-center gap-6" >
67+ { officers . map ( ( officer , index ) => (
68+ < div key = { index } className = "w-full sm:w-[calc(50%-0.75rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1.125rem)]" >
69+ < OfficerCard officer = { officer } />
70+ </ div >
71+ ) ) }
6372 </ div >
64- ) ) }
65- </ div >
73+ </ TabsContent >
74+
75+ < TabsContent value = "previous" className = "mt-0" >
76+ < div className = "max-w-4xl mx-auto" >
77+ < Accordion type = "single" collapsible className = "w-full" defaultValue = "fa25" >
78+ < AccordionItem value = "fa25" className = "border-bio-green/20" >
79+ < AccordionTrigger className = "text-xl font-semibold hover:text-bio-green" >
80+ Fall 2025
81+ </ AccordionTrigger >
82+ < AccordionContent >
83+ { loadingFa25 ? (
84+ < div className = "flex items-center justify-center py-8" >
85+ < div className = "animate-spin rounded-full h-16 w-16 border-b-2 border-bio-green" > </ div >
86+ </ div >
87+ ) : errorFa25 ? (
88+ < Alert >
89+ < AlertCircle className = "h-4 w-4" />
90+ < AlertDescription >
91+ Unable to load Fall 2025 officers data.
92+ </ AlertDescription >
93+ </ Alert >
94+ ) : (
95+ < div className = "flex flex-wrap justify-center gap-6 pt-4" >
96+ { officersFa25 . map ( ( officer , index ) => (
97+ < div key = { index } className = "w-full sm:w-[calc(50%-0.75rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1.125rem)]" >
98+ < OfficerCard officer = { officer } />
99+ </ div >
100+ ) ) }
101+ </ div >
102+ ) }
103+ </ AccordionContent >
104+ </ AccordionItem >
105+ </ Accordion >
106+ </ div >
107+ </ TabsContent >
108+ </ Tabs >
66109
67110 < div className = "mt-16 text-center" >
68111 < Card className = "border-bio-green/20 max-w-2xl mx-auto" >
@@ -85,44 +128,6 @@ const Officers = () => {
85128 </ CardContent >
86129 </ Card >
87130 </ div >
88-
89- { /* Previous Semesters Section */ }
90- < div className = "mt-16" >
91- < h2 className = "text-3xl md:text-4xl font-bold mb-6 text-center bg-gradient-bio bg-clip-text text-transparent" >
92- Previous Semesters
93- </ h2 >
94- < div className = "max-w-4xl mx-auto" >
95- < Accordion type = "single" collapsible className = "w-full" >
96- < AccordionItem value = "fa25" className = "border-bio-green/20" >
97- < AccordionTrigger className = "text-xl font-semibold hover:text-bio-green" >
98- Fall 2025
99- </ AccordionTrigger >
100- < AccordionContent >
101- { loadingFa25 ? (
102- < div className = "flex items-center justify-center py-8" >
103- < div className = "animate-spin rounded-full h-16 w-16 border-b-2 border-bio-green" > </ div >
104- </ div >
105- ) : errorFa25 ? (
106- < Alert >
107- < AlertCircle className = "h-4 w-4" />
108- < AlertDescription >
109- Unable to load Fall 2025 officers data.
110- </ AlertDescription >
111- </ Alert >
112- ) : (
113- < div className = "flex flex-wrap justify-center gap-6 pt-4" >
114- { officersFa25 . map ( ( officer , index ) => (
115- < div key = { index } className = "w-full sm:w-[calc(50%-0.75rem)] md:w-[calc(33.333%-1rem)] lg:w-[calc(25%-1.125rem)]" >
116- < OfficerCard officer = { officer } />
117- </ div >
118- ) ) }
119- </ div >
120- ) }
121- </ AccordionContent >
122- </ AccordionItem >
123- </ Accordion >
124- </ div >
125- </ div >
126131 </ div >
127132 </ div >
128133 ) ;
0 commit comments