Skip to content

Commit 76467be

Browse files
committed
improve viewing experience for prev sem officers
1 parent 2d33c45 commit 76467be

1 file changed

Lines changed: 50 additions & 45 deletions

File tree

‎src/pages/Officers.tsx‎

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useOfficersFa25 } from "@/hooks/useOfficersFa25";
55
import { OfficerCard } from "@/components/OfficerCard";
66
import { Alert, AlertDescription } from "@/components/ui/alert";
77
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion";
8+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
89

910
const 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

Comments
 (0)