11// components/landing/LandingIntern-CodevPagination.tsx
2+ //
3+ // This component displays a paginated list of team members (Interns and Codevs)
4+ // with prioritization applied using the prioritizeCodevs utility function.
5+ // Team members are automatically sorted by:
6+ // 1. Total codev points (highest first)
7+ // 2. Level 2+ badges (prioritized)
8+ // 3. Number of valid badges
9+ // 4. Has profile image
10+ // 5. Has work experience
11+ // 6. Years of experience
212
313"use client" ;
414
@@ -7,23 +17,46 @@ import { ChevronLeft, ChevronRight } from "lucide-react";
717import { Button } from "@/components/ui/button" ;
818import { cn } from "@/lib/utils" ;
919import InternCards from "./LandingIntern-CodevCard" ;
20+ import { prioritizeCodevs } from "@/utils/codev-priority" ;
1021
1122// Type definitions for the two roles from database
1223type PersonRole = 'Intern' | 'Codev' ;
1324
1425type TeamMember = {
26+ id : string ;
1527 name : string ;
1628 role : PersonRole ; // Either Intern or Codev from roles table
1729 image ?: string ;
1830 display_position ?: string ;
31+ years_of_experience ?: number ;
32+ internal_status ?: string ;
33+ level ?: Record < string , any > ;
34+ codev_points ?: Array < {
35+ id : string ;
36+ codev_id ?: string ;
37+ skill_category_id ?: string ;
38+ points : number ;
39+ } > ;
40+ work_experience ?: Array < any > ;
1941} ;
2042
2143interface TeamMembersApiResponse {
22- INTERNS : { // Keep as INTERNS to match current API response, you may modify later
44+ TEAM_MEMBERS : { // Changed from INTERNS to TEAM_MEMBERS to match new API
45+ id : string ;
2346 name : string ;
2447 role : string ;
2548 image ?: string ;
26- display_position ?: string
49+ display_position ?: string ;
50+ years_of_experience ?: number ;
51+ internal_status ?: string ;
52+ level ?: Record < string , any > ;
53+ codev_points ?: Array < {
54+ id : string ;
55+ codev_id ?: string ;
56+ skill_category_id ?: string ;
57+ points : number ;
58+ } > ;
59+ work_experience ?: Array < any > ;
2760 } [ ] ;
2861 error ?: string ;
2962}
@@ -57,25 +90,31 @@ export default function TeamMembersPagination() {
5790 setFetchError ( null ) ;
5891
5992 try {
60- const response = await fetch ( "/api/all-active-interns-codev" ) ;
93+ const response = await fetch ( "/api/all-active-interns-codev-prioritized " ) ;
6194 if ( ! response . ok ) {
6295 const errorText = await response . text ( ) ;
6396 throw new Error ( `Failed to fetch team members: ${ response . status } ${ errorText } ` ) ;
6497 }
6598
6699 const apiData = ( await response . json ( ) ) as TeamMembersApiResponse ;
67100
68- if ( ! apiData || ! Array . isArray ( apiData . INTERNS ) ) {
69- console . warn ( "Unexpected API response shape for /api/all-active-interns-codev:" , apiData ) ;
101+ if ( ! apiData || ! Array . isArray ( apiData . TEAM_MEMBERS ) ) {
102+ console . warn ( "Unexpected API response shape for /api/all-active-interns-codev-prioritized :" , apiData ) ;
70103 if ( ! isMounted ) return ;
71104 setAllTeamMembers ( [ ] ) ;
72105 } else {
73106 // Map API response to TeamMember objects with proper role validation
74- const mappedTeamMembers = apiData . INTERNS . map ( ( member ) => ( {
107+ const mappedTeamMembers = apiData . TEAM_MEMBERS . map ( ( member ) => ( {
108+ id : member . id ,
75109 name : member . name ,
76110 role : validateTeamRole ( member . role ) , // Ensures only Intern or Codev roles
77111 image : member . image ,
78112 display_position : member . display_position ,
113+ years_of_experience : member . years_of_experience ,
114+ internal_status : member . internal_status ,
115+ level : member . level ,
116+ codev_points : member . codev_points ,
117+ work_experience : member . work_experience ,
79118 } ) ) ;
80119
81120 if ( ! isMounted ) return ;
@@ -135,12 +174,13 @@ export default function TeamMembersPagination() {
135174 goToNextPage ( ) ;
136175 } ;
137176
138- // Debug: Log the current pagination state
139- console . log ( 'Debug pagination state:' , {
177+ // Debug: Log the current pagination state with prioritization info
178+ console . log ( 'Debug pagination state (prioritized) :' , {
140179 currentPage,
141180 totalPages,
142181 isLoading,
143- totalTeamMembers : allTeamMembers . length
182+ totalTeamMembers : allTeamMembers . length ,
183+ teamMembersArePrioritized : true // Team members are now prioritized using codev-priority.ts
144184 } ) ;
145185
146186 // Button disabled states
@@ -158,10 +198,11 @@ export default function TeamMembersPagination() {
158198 const internMembers = allTeamMembers . filter ( member => isInternRole ( member . role ) ) ;
159199 const codevMembers = allTeamMembers . filter ( member => isCodevRole ( member . role ) ) ;
160200
161- console . log ( 'Team composition:' , {
201+ console . log ( 'Team composition (prioritized) :' , {
162202 totalInterns : internMembers . length ,
163203 totalCodevs : codevMembers . length ,
164- totalMembers : allTeamMembers . length
204+ totalMembers : allTeamMembers . length ,
205+ note : 'Team members are sorted by priority using codev-priority.ts utility'
165206 } ) ;
166207
167208 return (
0 commit comments