|
1 | | -import { useEffect, useRef, useState, useCallback } from "react"; |
| 1 | +import { useEffect, useRef, useState, useCallback, useMemo } from "react"; |
2 | 2 | import { useCoreMetrics } from "@/hooks/useCoreMetrics"; |
3 | 3 | import { MAX_METRIC_XP, CoreMetricName } from "@/lib/coreMetrics"; |
4 | 4 | import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; |
@@ -103,6 +103,16 @@ const RadarChart = () => { |
103 | 103 | // radarData is computed from Skills and Characteristics XP |
104 | 104 | // It automatically updates when skill XP changes, attendance is marked, or time is edited |
105 | 105 | const data = radarData; |
| 106 | + |
| 107 | + // Memoize total contributing skills count to avoid recalculating on every render |
| 108 | + const totalContributingSkills = useMemo(() => { |
| 109 | + return coreMetrics.reduce((sum, m) => sum + m.contributions.length, 0); |
| 110 | + }, [coreMetrics]); |
| 111 | + |
| 112 | + // Memoize non-zero metrics count |
| 113 | + const nonZeroMetricsCount = useMemo(() => { |
| 114 | + return coreMetrics.filter(m => m.xp > 0).length; |
| 115 | + }, [coreMetrics]); |
106 | 116 |
|
107 | 117 | // Handle canvas click to detect which axis was clicked |
108 | 118 | const handleCanvasClick = useCallback((event: React.MouseEvent<HTMLCanvasElement>) => { |
@@ -311,8 +321,8 @@ const RadarChart = () => { |
311 | 321 | <div className="space-y-1 text-blue-700"> |
312 | 322 | <div>Radar Points: {data.length}</div> |
313 | 323 | <div>Core Metrics: {coreMetrics.length}</div> |
314 | | - <div>Total Contributing Skills: {coreMetrics.reduce((sum, m) => sum + m.contributions.length, 0)}</div> |
315 | | - <div>Non-Zero Metrics: {coreMetrics.filter(m => m.xp > 0).length}</div> |
| 324 | + <div>Total Contributing Skills: {totalContributingSkills}</div> |
| 325 | + <div>Non-Zero Metrics: {nonZeroMetricsCount}</div> |
316 | 326 | <div className="text-blue-500 text-[10px] mt-2"> |
317 | 327 | Click metrics to see contributors |
318 | 328 | </div> |
|
0 commit comments