11---
22import { getCollection } from ' astro:content' ;
3- import Layout from ' @layouts/SectionLayout.astro' ; // Adjust path as needed
3+ import Layout from ' @layouts/SectionLayout.astro' ;
44import SprintCard from ' @components/SprintCard.astro' ;
5- import Headline from " @ui/Headline.astro"
5+ // import Headline from "@ui/Headline.astro"
66
7- // Get all sprint entries
87const sprints = await getCollection (" sprints" , ({ data }) => {
98 return import .meta .env .MODE === " production" ? data .draft !== true : true ;
109});
1110
12- // Sort sprints by title or any other criteria
13- const sortedSprints = sprints .sort ((a , b ) =>
14- a .data .title .localeCompare (b .data .title )
15- );
16-
17- // Filter by status if needed
18- const activeSprints = sortedSprints .filter (sprint =>
19- sprint .data .status === ' active'
20- );
21-
22- // Extract unique rooms for filter
23- const uniqueRooms = Array .from (new Set (activeSprints .map (sprint => sprint .data .room )));
2411---
2512
2613<Layout title =" Sprints & Workshops" description =" All in one" >
@@ -46,29 +33,19 @@ const uniqueRooms = Array.from(new Set(activeSprints.map(sprint => sprint.data.r
4633 <option value =" Advanced" >Advanced</option >
4734 </select >
4835 </div >
49-
50- <div class =" flex flex-col gap-2" >
51- <label for =" room-filter" class =" font-semibold text-gray-700 text-sm" >Room:</label >
52- <select id =" room-filter" class =" px-4 py-2 border border-gray-300 rounded-lg bg-white text-sm min-w-[150px] focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" >
53- <option value =" " >All Rooms</option >
54- { uniqueRooms .map ((room ) => (
55- <option value = { room } >{ room } </option >
56- ))}
57- </select >
58- </div >
5936 </div >
6037
6138 <div class =" text-center mb-8" >
62- <p class =" text-gray-600 font-medium" >{ activeSprints .length } active { activeSprints .length === 1 ? ' sprint' : ' sprints' } </p >
39+ <p class =" text-gray-600 font-medium" >{ sprints .length } active { sprints .length === 1 ? ' sprint' : ' sprints' } </p >
6340 </div >
6441
6542 <section class =" max-w-4xl mx-auto" id =" sprints-list" >
66- { activeSprints .map ((sprint ) => (
43+ { sprints .map ((sprint ) => (
6744 <SprintCard slug = { sprint .slug } />
6845 ))}
6946 </section >
7047
71- { activeSprints .length === 0 && (
48+ { sprints .length === 0 && (
7249 <div class = " text-center py-12" >
7350 <p class = " text-gray-500 text-lg" >No sprints are currently available. Check back soon!</p >
7451 </div >
@@ -77,29 +54,24 @@ const uniqueRooms = Array.from(new Set(activeSprints.map(sprint => sprint.data.r
7754 </main >
7855
7956 <script >
80- // Client-side filtering
8157 document.addEventListener('DOMContentLoaded', () => {
8258 const levelFilter = document.getElementById('level-filter') as HTMLSelectElement;
83- const roomFilter = document.getElementById('room-filter') as HTMLSelectElement;
8459 const sprintsList = document.getElementById('sprints-list');
8560 const sprintsCount = document.querySelector('.text-center.mb-8 p');
8661
8762 function filterSprints() {
8863 const selectedLevel = levelFilter.value;
89- const selectedRoom = roomFilter.value;
9064 const sprintCards = sprintsList?.querySelectorAll('.sprint-card');
9165
9266 let visibleCount = 0;
9367
9468 sprintCards?.forEach((card) => {
9569 const cardElement = card as HTMLElement;
9670 const pythonLevel = cardElement.getAttribute('data-python-level');
97- const room = cardElement.getAttribute('data-room');
9871
9972 const levelMatch = !selectedLevel || pythonLevel === selectedLevel;
100- const roomMatch = !selectedRoom || room === selectedRoom;
10173
102- if (levelMatch && roomMatch ) {
74+ if (levelMatch) {
10375 cardElement.style.display = 'block';
10476 visibleCount++;
10577 } else {
@@ -113,7 +85,6 @@ const uniqueRooms = Array.from(new Set(activeSprints.map(sprint => sprint.data.r
11385 }
11486
11587 levelFilter?.addEventListener('change', filterSprints);
116- roomFilter?.addEventListener('change', filterSprints);
11788 });
11889 </script >
11990</Layout >
0 commit comments