import React, { useState, useEffect } from 'react'; import { ProgressBar } from 'primereact/progressbar'; import { Accordion, AccordionTab } from 'primereact/accordion'; import { useSession, signIn, getSession } from 'next-auth/react'; import { useRouter } from 'next/router'; import { useBadge } from '@/hooks/badges/useBadge'; import GenericButton from '@/components/buttons/GenericButton'; import UserProgressFlow from './UserProgressFlow'; import { Tooltip } from 'primereact/tooltip'; const allTasks = [ { status: 'Connect GitHub', completed: false, tier: 'Pleb', courseId: null, subTasks: [ { status: 'Connect your GitHub account', completed: false }, ] }, { status: 'PlebDevs Starter', completed: false, tier: 'Plebdev', // courseId: "f538f5c5-1a72-4804-8eb1-3f05cea64874", courseId: "5664e78f-c618-410d-a7cc-f3393b021fdf", subTasks: [ { status: 'Complete the course', completed: false }, ] }, { status: 'Frontend Course', completed: false, tier: 'Frontend Dev', courseId: 'f73c37f4-df2e-4f7d-a838-dce568c76136', subTasks: [ { status: 'Complete the course', completed: false }, // { status: 'Select your completed project', completed: false }, ] }, { status: 'Backend Course', completed: false, tier: 'Backend Dev', courseId: 'f6825391-831c-44da-904a-9ac3d149b7be', subTasks: [ { status: 'Complete the course', completed: false }, // { status: 'Select your completed project', completed: false }, ] }, ]; const UserProgress = () => { const [progress, setProgress] = useState(0); const [currentTier, setCurrentTier] = useState(null); const [expandedItems, setExpandedItems] = useState({}); const [completedCourses, setCompletedCourses] = useState([]); const [tasks, setTasks] = useState([]); const [isLoading, setIsLoading] = useState(true); const router = useRouter(); const { data: session, update } = useSession(); useBadge(); useEffect(() => { if (session?.user) { setIsLoading(true); const user = session.user; const ids = user?.userCourses?.map(course => course?.completed ? course.courseId : null).filter(id => id !== null); if (ids && ids.length > 0) { setCompletedCourses(ids); generateTasks(ids); calculateProgress(ids); calculateCurrentTier(ids); } else { generateTasks([]); calculateProgress([]); calculateCurrentTier([]); } setIsLoading(false); } }, [session]); const generateTasks = (completedCourseIds) => { const updatedTasks = allTasks.map(task => { if (task.status === 'Connect GitHub') { return { ...task, completed: session?.account?.provider === 'github' ? true : false, subTasks: task.subTasks ? task.subTasks.map(subTask => ({ ...subTask, completed: session?.account?.provider === 'github' ? true : false })) : undefined }; } return { ...task, completed: task.courseId === null || completedCourseIds.includes(task.courseId), subTasks: task.subTasks ? task.subTasks.map(subTask => ({ ...subTask, completed: completedCourseIds.includes(task.courseId) })) : undefined }; }); setTasks(updatedTasks); }; const calculateProgress = (completedCourseIds) => { let progressValue = 0; if (session?.account?.provider === 'github') { progressValue += 25; } const remainingTasks = allTasks.slice(1); remainingTasks.forEach(task => { if (completedCourseIds.includes(task.courseId)) { progressValue += 25; } }); setProgress(progressValue); }; const calculateCurrentTier = (completedCourseIds) => { let tier = null; if (completedCourseIds.includes("f6825391-831c-44da-904a-9ac3d149b7be")) { tier = 'Backend Dev'; } else if (completedCourseIds.includes("f73c37f4-df2e-4f7d-a838-dce568c76136")) { tier = 'Frontend Dev'; } else if (completedCourseIds.includes("f6daa88a-53d6-4901-8dbd-d2203a05b7ab")) { tier = 'Plebdev'; } else if (session?.account?.provider === 'github') { tier = 'Pleb'; } setCurrentTier(tier); }; const handleAccordionChange = (index, isExpanded) => { setExpandedItems(prev => ({ ...prev, [index]: isExpanded })); }; const handleGitHubLink = async () => { try { // If user is already signed in, we'll link the accounts if (session?.user) { const result = await signIn("github", { redirect: false, // Pass existing user data for linking userId: session?.user?.id, pubkey: session?.user?.pubkey, privkey: session?.user?.privkey || null }); if (result?.ok) { // Wait for session update await new Promise(resolve => setTimeout(resolve, 1000)); const updatedSession = await getSession(); if (updatedSession?.account?.provider === 'github') { router.push('/'); // Accounts linked successfully } } } else { // Normal GitHub sign in await signIn("github"); } } catch (error) { console.error("GitHub sign in error:", error); } }; return (

Dev Journey

Track your progress from Pleb to Plebdev

Progress {progress}%
Current Tier: {currentTier ? ( {currentTier} ) : ( Not Started )}
    {tasks.map((task, index) => (
  • handleAccordionChange(index, e.index === 0)} >
    {task.completed ? (
    ) : (
    )} {task.status}
    {task.tier}
} > {task.status === 'Connect GitHub' && !task.completed && (
)} {task.subTasks && (
    {task.subTasks.map((subTask, subIndex) => (
  • {subTask.completed ? (
    ) : (
    )} {subTask.status}
  • ))}
)} {task.courseId && (
router.push(`/courses/${task.courseId}`)} tooltip="View Course" tooltipOptions={{ position: "top" }} outlined size="small" />
)} ))}
{isLoading ? (
) : ( )}
); }; export default UserProgress;