'use client' import { useState, useMemo } from 'react' import Link from 'next/link' import type { Route } from 'next' import { trpc } from '@/lib/trpc/client' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Skeleton } from '@/components/ui/skeleton' import { Progress } from '@/components/ui/progress' import { Avatar, AvatarFallback } from '@/components/ui/avatar' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Users, Briefcase, ArrowRight, Mail, MapPin, GraduationCap, Waves, Crown, CheckCircle2, Circle, Clock, Search, } from 'lucide-react' import { formatDateOnly } from '@/lib/utils' // Status badge colors const statusColors: Record = { SUBMITTED: 'secondary', ELIGIBLE: 'default', ASSIGNED: 'default', SEMIFINALIST: 'default', FINALIST: 'default', REJECTED: 'destructive', } // Completion status display const completionBadge: Record = { in_progress: { label: 'In Progress', variant: 'secondary' }, completed: { label: 'Completed', variant: 'default' }, paused: { label: 'Paused', variant: 'outline' }, } function DashboardSkeleton() { return (
) } export default function MentorDashboard() { const { data: assignments, isLoading } = trpc.mentor.getMyProjects.useQuery() const [search, setSearch] = useState('') const [statusFilter, setStatusFilter] = useState('all') const projects = assignments || [] const completedCount = projects.filter((a) => a.completionStatus === 'completed').length const inProgressCount = projects.filter((a) => a.completionStatus === 'in_progress').length const filteredProjects = useMemo(() => { return projects.filter(a => { const matchesSearch = !search || a.project.title.toLowerCase().includes(search.toLowerCase()) || a.project.teamName?.toLowerCase().includes(search.toLowerCase()) const matchesStatus = statusFilter === 'all' || a.completionStatus === statusFilter return matchesSearch && matchesStatus }) }, [projects, search, statusFilter]) if (isLoading) { return } return (
{/* Header */}

Mentor Dashboard

View and manage your assigned mentee projects

{/* Stats */}
Assigned Projects
{projects.length}

Projects you are mentoring

Completed
{completedCount}
{projects.length > 0 && ( )} {projects.length > 0 ? Math.round((completedCount / projects.length) * 100) : 0}%
Total Team Members
{projects.reduce( (acc, a) => acc + (a.project.teamMembers?.length || 0), 0 )}

Across all assigned projects

{/* Quick Actions */}
{/* Projects List */}

Your Mentees

{/* Search and Filter */} {projects.length > 0 && (
setSearch(e.target.value)} className="pl-9" />
)} {projects.length === 0 ? (

No assigned projects yet

You will see your mentee projects here once they are assigned to you.

) : filteredProjects.length === 0 ? (

No projects match your search criteria

) : (
{filteredProjects.map((assignment) => { const project = assignment.project const teamLead = project.teamMembers?.find( (m) => m.role === 'LEAD' ) const badge = completionBadge[assignment.completionStatus] || completionBadge.in_progress return (
{project.round?.program?.year} Edition {project.round && ( <> - {project.round.name} )}
{project.title} {project.status && ( {project.status.replace('_', ' ')} )} {assignment.completionStatus === 'completed' && ( )} {assignment.completionStatus === 'in_progress' && ( )} {assignment.completionStatus === 'paused' && ( )} {badge.label} {project.teamName && ( {project.teamName} )}
{/* Category badges */}
{project.competitionCategory && ( {project.competitionCategory === 'STARTUP' ? 'Start-up' : 'Business Concept'} )} {project.oceanIssue && ( {project.oceanIssue.replace(/_/g, ' ')} )} {project.country && ( {project.country} )}
{/* Description preview */} {project.description && (

{project.description}

)} {/* Team Lead Info */} {teamLead && (

{teamLead.user.name || 'Unnamed'}{' '} (Team Lead)

{teamLead.user.email}
{project.teamMembers?.length || 0} team member {(project.teamMembers?.length || 0) !== 1 ? 's' : ''}
)} {/* Assignment date + last viewed */}
Assigned {formatDateOnly(assignment.assignedAt)} {assignment.lastViewedAt && ( Last viewed {formatDateOnly(assignment.lastViewedAt)} )}
) })}
)}
) }