diff --git a/frontend/app/components/analytics-comp/MemberAnalytics.tsx b/frontend/app/components/analytics-comp/MemberAnalytics.tsx index 2084425..bc77e0a 100644 --- a/frontend/app/components/analytics-comp/MemberAnalytics.tsx +++ b/frontend/app/components/analytics-comp/MemberAnalytics.tsx @@ -8,14 +8,51 @@ type MemberAnalyticsProps = { onSelectMember: (memberId: string) => void; }; +function getCompletionRate( + completed: number, + assigned: number +) { + return assigned > 0 + ? Math.round((completed / assigned) * 100) + : 0; +} + +function getReviewLoad( + reviews: number +) { + return Math.min(100, reviews * 4); +} + export default function MemberAnalytics({ members, selectedMember, onSelectMember, }: MemberAnalyticsProps) { - const completionRate = Math.round((selectedMember.completed / selectedMember.assigned) * 100); - const reviewLoad = Math.min(100, selectedMember.reviews * 4); - const otherPercent = 100 - completionRate; + const analyticsMetrics = useMemo( + () => { + const completionRate = + getCompletionRate( + selectedMember.completed, + selectedMember.assigned + ); + + return { + completionRate, + reviewLoad: getReviewLoad( + selectedMember.reviews + ), + otherPercent: + 100 - completionRate, + }; + }, + [selectedMember] + ); + + const { + completionRate, + reviewLoad, + otherPercent, + } = analyticsMetrics; return (
@@ -110,7 +147,12 @@ export default function MemberAnalytics({ >
{member.name} - {Math.round((member.completed / member.assigned) * 100)}% + + {getCompletionRate( + member.completed, + member.assigned + )}% +

{member.role}