import { DateTime } from "luxon"; import { useState } from "react"; import { Button } from "~/components/ui/button"; import { ChevronLeft, ChevronRight, Star, Users, User, SortAsc, SortDesc, } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "~/components/ui/select"; import { Tabs, TabsList, TabsTrigger } from "~/components/ui/tabs"; import DatePickerWithRange from "~/components/home/date-picker"; import BottomNavigation from "~/components/home/bottom-nav"; import Error from "~/components/error"; import { useSearchParams } from "react-router"; import { useColles } from "~/lib/api"; import TabContent from "~/components/home/tab-content"; const tabsStyle = "rounded-none bg-background data-[state=active]:bg-background! h-full data-[state=active]:shadow-none border-b-2 border-transparent border-t-0 border-r-0 border-l-0 data-[state=active]:border-primary!"; export default function Home() { // Handle query parameters const [query, setQuery] = useSearchParams(); const updateQuery = (key: string, value: string) => { if (query.get(key) !== value) { setQuery((prev) => { const newQuery = new URLSearchParams(prev); newQuery.set(key, value); return newQuery; }); } }; // Tabs const activeTab = query.get("view") || "you"; const setActiveTab = (tab: string) => updateQuery("view", tab); // Date const rawStartDate = query.get("start"); const startDate = rawStartDate ? DateTime.fromISO(rawStartDate, { zone: "local" }) : DateTime.now().startOf("week"); const setStartDate = (date: DateTime) => updateQuery("start", date.startOf("week").toISODate()!); const handlePreviousWeek = () => { const previousWeek = startDate.minus({ weeks: 1 }); setStartDate(previousWeek); }; const handleNextWeek = () => { const nextWeek = startDate.plus({ weeks: 1 }); setStartDate(nextWeek); }; // Fetch colles from API const { studentColles, classColles, favoriteColles, error, isLoading } = useColles(startDate); // Error handling (after all hooks) if (error) return ( ); // TODO: FAVORITES const useToggleStar = (auth: any) => {}; // Filter state const rawSubject = query.get("subject"); const [subjectFilter, setSubjectFilter] = useState( rawSubject === "all" ? "" : rawSubject || "" ); const setSubject = (subject: string) => { updateQuery("subject", subject); setSubjectFilter(subject); }; const rawExaminer = query.get("examiner"); const [examinerFilter, setExaminerFilter] = useState( rawExaminer === "all" ? "" : rawExaminer || "" ); const setExaminer = (examiner: string) => { updateQuery("examiner", examiner); setExaminerFilter(examiner); }; const [sorted, setSort] = useState(query.get("sort") || "desc"); const toggleSort = () => { const newSort = sorted === "asc" ? "desc" : "asc"; updateQuery("sort", newSort); setSort(newSort); }; const keepUnique = (arr: any[]) => { return [...new Set(arr)]; }; const subjects = keepUnique(classColles.map((colle) => colle.subject?.name)); const examiners = keepUnique( classColles.map((colle) => colle.examiner?.name) ); const applyFilters = (colles: any[]) => { return colles .filter((colle) => { const subjectMatch = subjectFilter === "all" || !subjectFilter ? true : colle.subject?.name === subjectFilter; const examinerMatch = examinerFilter === "all" || !examinerFilter ? true : colle.examiner?.name === examinerFilter; return subjectMatch && examinerMatch; }) .sort((a, b) => { if (sorted === "asc") { return a.date.localeCompare(b.date); } else { return b.date.localeCompare(a.date); } }); }; return (
{/* Tabs */} Vous {/* Favoris */} Classe {/* Week Navigation */}
{/* Filter component */}
{/* Your Colles Tab */} {activeTab === "you" && ( )} {/* Favorites Tab {activeTab === "favorites" && ( )} */} {/* Class Colles Tab */} {activeTab === "class" && ( )} {/* Bottom Navigation for Mobile */}
); }