"use client" import { useMemo } from "react" import Link from "next/link" import { BarChart3, Trophy } from "lucide-react" import { ChartCardShell } from "@/shared/components/charts/chart-card-shell" import { TrendLineChart } from "@/shared/components/charts/trend-line-chart" import { Badge } from "@/shared/components/ui/badge" import { formatDate } from "@/shared/lib/utils" import type { StudentDashboardGradeProps } from "@/modules/homework/types" export function ChildGradeSummary({ grades, childId, childName, }: { grades: StudentDashboardGradeProps childId: string childName: string }) { const hasGradeTrend = grades.trend.length > 0 const ranking = grades.ranking const latestGrade = grades.trend[grades.trend.length - 1] const chartData = useMemo( () => grades.trend.map((item) => ({ title: item.assignmentTitle, score: Math.round(item.percentage), fullTitle: item.assignmentTitle, date: formatDate(item.submittedAt), rawScore: item.score, maxScore: item.maxScore, })), [grades.trend], ) return (
Latest Score
{latestGrade ? `${Math.round(latestGrade.percentage)}%` : "-"}
{latestGrade ? (
{latestGrade.score}/{latestGrade.maxScore}
) : null}
Class Rank
{ranking ? `${ranking.rank}/${ranking.classSize}` : "-"}
{ranking ?
Current position
: null}
{grades.recent.length > 0 ? (
Recent Grades
{grades.recent.slice(0, 3).map((r) => (
{r.assignmentTitle}
{formatDate(r.submittedAt)}
{r.score}/{r.maxScore} ))}
) : null}
) }