From f243847216279cbd43879de8b5ef6dcceb3a2f1d Mon Sep 17 00:00:00 2001 From: polwex Date: Thu, 29 May 2025 14:08:02 +0700 Subject: lets see --- src/pages/lessons.tsx | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/pages/lessons.tsx (limited to 'src/pages/lessons.tsx') diff --git a/src/pages/lessons.tsx b/src/pages/lessons.tsx new file mode 100644 index 0000000..ef8aa49 --- /dev/null +++ b/src/pages/lessons.tsx @@ -0,0 +1,126 @@ +import { useState } from "react"; +import { getState } from "@/lib/db"; +import { getUserLessons, getLessonProgress } from "@/actions/srs"; +import { Button } from "@/components/ui/button"; +import { Card } from "@/components/ui/card"; +import { Progress } from "@/components/ui/progress"; + +// This is a server component that gets the initial data +export default async function LessonsPage() { + const state = getState(null); + const userId = state.user?.id; + + // If not logged in, show login required message + if (!userId) { + return ( +
+ +

Login Required

+

You need to be logged in to view your lessons.

+ +
+
+ ); + } + + // Get user lessons data + let lessons; + try { + lessons = await getUserLessons(userId); + } catch (error) { + console.error("Error fetching lessons:", error); + } + + return ( +
+
+

Your Lessons

+ +
+ + {!lessons || lessons.length === 0 ? ( + + ) : ( +
+ {lessons.map((lesson) => ( + + ))} +
+ )} +
+ ); +} + +// Component to display when no lessons are found +function NoLessonsFound() { + return ( + +

No Lessons Found

+

+ You don't have any lessons available yet. +

+
+ ); +} + +// Component to display a lesson card +function LessonCard({ lesson, userId }: { lesson: any; userId: number }) { + const [isHovered, setIsHovered] = useState(false); + + // Calculate progress percentage + const progressPercentage = lesson.progress || 0; + + // Determine progress color + const getProgressColor = (percentage: number) => { + if (percentage >= 80) return "bg-green-500"; + if (percentage >= 50) return "bg-yellow-500"; + return "bg-blue-500"; + }; + + return ( + setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + > +
+

{lesson.name}

+

+ {lesson.description || "No description available."} +

+ +
+
+ {lesson.masteredCards} + / {lesson.totalCards} cards +
+
+ + {lesson.dueCards} due + +
+
+ +
+ +
+ +
+ + +
+
+
+ ); +} \ No newline at end of file -- cgit v1.2.3