import React from "react"; import { DataTable } from "primereact/datatable"; import { Column } from "primereact/column"; import useWindowWidth from "@/hooks/useWindowWidth"; import ProgressListItem from "@/components/content/lists/ProgressListItem"; import { formatDateTime } from "@/utils/time"; import { ProgressSpinner } from "primereact/progressspinner"; import Link from 'next/link'; const UserProgressTable = ({ session, ndk }) => { const prepareProgressData = () => { if (!session?.user?.userCourses) return []; const progressData = []; // Add badge awards session.user.userBadges?.forEach(userBadge => { progressData.push({ id: `badge-${userBadge.id}`, type: 'badge', name: userBadge.badge?.name, eventType: 'awarded', date: userBadge.awardedAt, courseId: userBadge.badge?.courseId, badgeId: userBadge.badgeId, noteId: userBadge.badge?.noteId }); }); session.user.userCourses.forEach(courseProgress => { // Add course start entry if (courseProgress.started) { progressData.push({ id: `${courseProgress.id}-start`, type: 'course', name: courseProgress.course?.name, eventType: 'started', date: courseProgress.startedAt, courseId: courseProgress.courseId }); } // Add course completion entry if (courseProgress.completed) { progressData.push({ id: `${courseProgress.id}-complete`, type: 'course', name: courseProgress.course?.name, eventType: 'completed', date: courseProgress.completedAt, courseId: courseProgress.courseId }); } // Add lesson entries const courseLessons = session.user.userLessons?.filter( lesson => lesson.lesson?.courseId === courseProgress.courseId ) || []; courseLessons.forEach(lessonProgress => { // Add lesson start entry if (lessonProgress.opened) { progressData.push({ id: `${lessonProgress.id}-start`, type: 'lesson', name: lessonProgress.lesson?.name, eventType: 'started', date: lessonProgress.openedAt, courseId: courseProgress.courseId, lessonId: lessonProgress.lessonId, resourceId: lessonProgress.lesson?.resourceId }); } // Add lesson completion entry if (lessonProgress.completed) { progressData.push({ id: `${lessonProgress.id}-complete`, type: 'lesson', name: lessonProgress.lesson?.name, eventType: 'completed', date: lessonProgress.completedAt, courseId: courseProgress.courseId, lessonId: lessonProgress.lessonId, resourceId: lessonProgress.lesson?.resourceId }); } }); }); // Sort by date, most recent first return progressData.sort((a, b) => new Date(b.date) - new Date(a.date)); }; const header = (
Progress
); const typeTemplate = (rowData) => (
{rowData.type}
); const eventTemplate = (rowData) => (
{rowData.eventType}
); const nameTemplate = (rowData) => (
{rowData.type === 'badge' ? ( {rowData.name} ) : rowData.type === 'course' ? ( ) : ( )}
); const dateTemplate = (rowData) => { // Adjust for timezone offset like in the contribution chart const date = new Date(rowData.date); const adjustedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60000); return (
{formatDateTime(adjustedDate)}
); }; if (!session || !session?.user || !ndk) { return
; } return ( ); }; export default UserProgressTable;