import React, { useMemo } from 'react'; import ReactConfetti from 'react-confetti'; import { Trophy, ArrowLeft, BookOpen, Target } from 'lucide-react'; import Link from 'next/link'; import { getUriWithOrg } from '@services/config/config'; import { getCourseThumbnailMediaDirectory } from '@services/media/media'; import { useWindowSize } from 'usehooks-ts'; import { useOrg } from '@components/Contexts/OrgContext'; interface CourseEndViewProps { courseName: string; orgslug: string; courseUuid: string; thumbnailImage: string; course: any; trailData: any; } const CourseEndView: React.FC = ({ courseName, orgslug, courseUuid, thumbnailImage, course, trailData }) => { const { width, height } = useWindowSize(); const org = useOrg() as any; // Check if course is actually completed const isCourseCompleted = useMemo(() => { if (!trailData || !course) return false; // Flatten all activities const allActivities = course.chapters.flatMap((chapter: any) => chapter.activities.map((activity: any) => ({ ...activity, chapterId: chapter.id })) ); // Check if all activities are completed const isActivityDone = (activity: any) => { const cleanCourseUuid = course.course_uuid?.replace('course_', ''); const run = trailData?.runs?.find( (run: any) => { const cleanRunCourseUuid = run.course?.course_uuid?.replace('course_', ''); return cleanRunCourseUuid === cleanCourseUuid; } ); if (run) { return run.steps.find( (step: any) => step.activity_id === activity.id && step.complete === true ); } return false; }; const totalActivities = allActivities.length; const completedActivities = allActivities.filter((activity: any) => isActivityDone(activity)).length; return totalActivities > 0 && completedActivities === totalActivities; }, [trailData, course]); // Calculate progress for incomplete courses const progressInfo = useMemo(() => { if (!trailData || !course || isCourseCompleted) return null; const allActivities = course.chapters.flatMap((chapter: any) => chapter.activities.map((activity: any) => ({ ...activity, chapterId: chapter.id })) ); const isActivityDone = (activity: any) => { const cleanCourseUuid = course.course_uuid?.replace('course_', ''); const run = trailData?.runs?.find( (run: any) => { const cleanRunCourseUuid = run.course?.course_uuid?.replace('course_', ''); return cleanRunCourseUuid === cleanCourseUuid; } ); if (run) { return run.steps.find( (step: any) => step.activity_id === activity.id && step.complete === true ); } return false; }; const totalActivities = allActivities.length; const completedActivities = allActivities.filter((activity: any) => isActivityDone(activity)).length; const progressPercentage = Math.round((completedActivities / totalActivities) * 100); return { completed: completedActivities, total: totalActivities, percentage: progressPercentage }; }, [trailData, course, isCourseCompleted]); if (isCourseCompleted) { // Show congratulations for completed course return (
{thumbnailImage && ( {courseName} )}

Congratulations! 🎉

You've successfully completed {courseName}

Your dedication and hard work have paid off. You've mastered all the content in this course.

Back to Course
); } else { // Show progress and encouragement for incomplete course return (
{thumbnailImage && ( {courseName} )}

Keep Going! 💪

You're making great progress in {courseName}

{progressInfo && (
Course Progress
Progress {progressInfo.percentage}%
{progressInfo.completed} of {progressInfo.total} activities completed
)}

You're doing great! Complete the remaining activities to unlock your course completion certificate.

Continue Learning
); } }; export default CourseEndView;