33import { useState } from 'react' ;
44import { useTeams } from '@pages/_hooks/useTeams' ;
55import { GoSearch } from 'react-icons/go' ;
6+ import { IoAdd } from 'react-icons/io5' ;
7+ import { RxCross1 } from 'react-icons/rx' ;
68import TeamCard from '../_components/Teams/TeamCard' ;
79import Team from '@typeDefs/team' ;
810import User from '@typeDefs/user' ;
@@ -20,6 +22,7 @@ export default function Teams() {
2022 const { loading, teams, getTeams } = useTeams ( ) ;
2123 const { data, setData } = useFormContext ( ) ;
2224 const isEditing = Boolean ( data . _id ) ;
25+ const [ reportedTeamsDisplay , setReportedTeamsDisplay ] = useState ( false ) ;
2326
2427 if ( loading ) {
2528 return 'loading...' ;
@@ -29,6 +32,10 @@ export default function Teams() {
2932 return teams . error ;
3033 }
3134
35+ function toggleReportedTeamsDisplay ( ) {
36+ setReportedTeamsDisplay ( ! reportedTeamsDisplay ) ;
37+ }
38+
3239 const teamData : TeamWithJudges [ ] = teams . body
3340 . filter ( ( team : TeamWithJudges ) =>
3441 JSON . stringify ( team ) . toLowerCase ( ) . includes ( search . toLowerCase ( ) )
@@ -44,6 +51,8 @@ export default function Teams() {
4451 backgroundColor : '#9EE7E5' ,
4552 } ) ) ;
4653
54+ const reportedTeams = teamData . filter ( ( team ) => team . reports ?. length > 0 ) ;
55+
4756 return (
4857 < div className = { styles . container } >
4958 < h1 className = { styles . page_title } > Team Manager</ h1 >
@@ -65,15 +74,71 @@ export default function Teams() {
6574 />
6675 < GoSearch className = { styles . search_icon } />
6776 </ div >
77+ < div className = { styles . reported_teams_container } >
78+ < h2 className = { styles . action_header } > Reported Teams</ h2 >
79+ < button
80+ onClick = { toggleReportedTeamsDisplay }
81+ style = { {
82+ fontSize : '1.25rem' ,
83+ display : 'flex' ,
84+ justifyContent : 'center' ,
85+ alignItems : 'center' ,
86+ width : '40px' ,
87+ height : '40px' ,
88+ backgroundColor : reportedTeamsDisplay
89+ ? 'var(--text-error)'
90+ : 'var(--text-gray-light)' ,
91+ color : reportedTeamsDisplay ? 'white' : 'black' ,
92+ borderRadius : '6px' ,
93+ cursor : 'pointer' ,
94+ border : 'none' ,
95+ } }
96+ >
97+ { reportedTeamsDisplay ? < RxCross1 /> : < IoAdd /> }
98+ </ button >
99+ </ div >
100+ < div className = { styles . reports_container } >
101+ { reportedTeamsDisplay &&
102+ reportedTeams
103+ . sort ( ( a , b ) => ( b . reports ?. length || 0 ) - ( a . reports ?. length || 0 ) )
104+ . map ( ( team ) => (
105+ < div className = { styles . report_container } key = { team . _id } >
106+ < a href = { `#${ team . _id } ` } >
107+ < strong style = { { color : 'var(--text-error)' } } >
108+ [{ team . reports ?. length } ]
109+ </ strong > { ' ' }
110+ Table { team . tableNumber } : { team . name } (Team { team . teamNumber } )
111+ </ a >
112+ </ div >
113+ ) ) }
114+ </ div >
68115 < div className = { styles . data_portion } >
69116 < div className = { styles . teams_list } >
70- { teamData . map ( ( team : TeamWithJudges ) => (
71- < div className = { styles . team_card_wrapper } key = { team . _id } >
72- < TeamCard team = { team } onEditClick = { ( ) => setData ( team ) } />
73- </ div >
74- ) ) }
117+ { teamData
118+ . sort ( ( a , b ) => ( b . reports ?. length || 0 ) - ( a . reports ?. length || 0 ) )
119+ . map ( ( team : TeamWithJudges ) => (
120+ < div
121+ id = { team . _id }
122+ className = { styles . team_card_wrapper }
123+ key = { team . _id }
124+ >
125+ < TeamCard team = { team } onEditClick = { ( ) => setData ( team ) } />
126+ </ div >
127+ ) ) }
128+ { teamData
129+ . sort ( ( a , b ) => ( b . reports ?. length || 0 ) - ( a . reports ?. length || 0 ) )
130+ . map ( ( team : TeamWithJudges ) => (
131+ < div
132+ id = { team . _id }
133+ className = { styles . team_card_wrapper }
134+ key = { team . _id }
135+ >
136+ < TeamCard team = { team } onEditClick = { ( ) => setData ( team ) } />
137+ </ div >
138+ ) ) }
75139 </ div >
76140 < div className = { styles . bar_chart_container } >
141+ < h2 className = { styles . action_header } > Judge Count</ h2 >
77142 < BarChart
78143 data = { chartData }
79144 lines = { [ { style : 'dashed 1px red' , value : 3 } ] }
0 commit comments