11"use client" ;
22import { fetchSubmission , type Submission } from "@/api/fetchIdeas" ;
3- import { fetchTeams } from "@/api/fetchTeams " ;
3+ import { fetchTeams } from "@/api/teams " ;
44import { DataTable } from "@/components/table/data-table" ;
55import { DataTableColumnHeader } from "@/components/table/data-table-column-header" ;
66import { Card , CardContent , CardHeader , CardTitle } from "@/components/ui/card" ;
7- import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue } from "@/components/ui/select" ;
7+ import {
8+ Select ,
9+ SelectContent ,
10+ SelectItem ,
11+ SelectTrigger ,
12+ SelectValue ,
13+ } from "@/components/ui/select" ;
814import { type Team } from "@/data/schema" ;
9- import { useQuery } from ' @tanstack/react-query' ;
15+ import { useQuery } from " @tanstack/react-query" ;
1016import { type ColumnDef } from "@tanstack/react-table" ;
11- import { useEffect , useState } from ' react' ;
17+ import { useEffect , useState } from " react" ;
1218
1319interface TeamData {
1420 id : string ;
@@ -26,33 +32,38 @@ export default function TeamsIdeasTable() {
2632 const [ filteredData , setFilteredData ] = useState < TeamData [ ] > ( [ ] ) ;
2733 const [ availableTracks , setAvailableTracks ] = useState < string [ ] > ( [ ] ) ;
2834
29- const { data : teamsData , isLoading : teamsLoading , isError : teamsError } = useQuery ( {
35+ const {
36+ data : teamsData ,
37+ isLoading : teamsLoading ,
38+ isError : teamsError ,
39+ } = useQuery ( {
3040 queryKey : [ "teams" , currentPage , pageLimit ] ,
31- queryFn : ( ) => fetchTeams ( {
32- limit : pageLimit ,
33- cursorId : undefined
34- } ) ,
41+ queryFn : ( ) =>
42+ fetchTeams ( {
43+ limit : pageLimit ,
44+ cursorId : undefined ,
45+ } ) ,
3546 } ) ;
3647
3748 const { data : processedData , isLoading : submissionsLoading } = useQuery ( {
3849 queryKey : [ "teams-submissions" , teamsData ?. teams ] ,
3950 queryFn : async ( ) => {
4051 if ( ! teamsData ?. teams ) return [ ] ;
41-
52+
4253 const teamsWithSubmissions = await Promise . all (
4354 teamsData . teams . map ( async ( team : Team ) => {
4455 if ( ! team . ID ) return null ;
45-
56+
4657 const submission = await fetchSubmission ( team . ID ) ;
47-
58+
4859 return {
4960 id : team . ID ,
5061 name : team . Name ,
5162 numberOfPeople : team . NumberOfPeople ,
5263 roundQualified : team . RoundQualified ,
53- submission : submission
64+ submission : submission ,
5465 } as TeamData ;
55- } )
66+ } ) ,
5667 ) ;
5768
5869 return teamsWithSubmissions . filter ( ( team ) : team is TeamData => ! ! team ) ;
@@ -63,7 +74,7 @@ export default function TeamsIdeasTable() {
6374 useEffect ( ( ) => {
6475 if ( processedData ) {
6576 const tracks = new Set < string > ( ) ;
66- processedData . forEach ( team => {
77+ processedData . forEach ( ( team ) => {
6778 if ( team . submission ?. track ) {
6879 tracks . add ( team . submission . track ) ;
6980 }
@@ -75,10 +86,14 @@ export default function TeamsIdeasTable() {
7586 useEffect ( ( ) => {
7687 if ( ! processedData ) return ;
7788
78- const filtered = processedData . filter ( team => {
89+ const filtered = processedData . filter ( ( team ) => {
7990 const matchesSearch = searchTerm
80- ? ( team . name ?. toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ?? false ) ||
81- ( team . submission ?. title ?. toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ?? false )
91+ ? ( team . name ?. toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ??
92+ false ) ||
93+ ( team . submission ?. title
94+ ?. toLowerCase ( )
95+ . includes ( searchTerm . toLowerCase ( ) ) ??
96+ false )
8297 : true ;
8398
8499 const matchesTrack = selectedTrack
@@ -109,9 +124,7 @@ export default function TeamsIdeasTable() {
109124 < DataTableColumnHeader column = { column } title = "Team Size" />
110125 ) ,
111126 cell : ( { row } ) => (
112- < div className = "text-center" >
113- { row . getValue ( "numberOfPeople" ) }
114- </ div >
127+ < div className = "text-center" > { row . getValue ( "numberOfPeople" ) } </ div >
115128 ) ,
116129 } ,
117130 {
@@ -154,15 +167,15 @@ export default function TeamsIdeasTable() {
154167
155168 if ( teamsLoading || submissionsLoading ) {
156169 return (
157- < div className = "p-8 flex justify-center" >
170+ < div className = "flex justify-center p-8 " >
158171 < div className = "text-lg" > Loading teams and submissions...</ div >
159172 </ div >
160173 ) ;
161174 }
162175
163176 if ( teamsError ) {
164177 return (
165- < div className = "p-8 flex justify-center" >
178+ < div className = "flex justify-center p-8 " >
166179 < div className = "text-lg text-red-500" > Error loading teams data</ div >
167180 </ div >
168181 ) ;
@@ -184,13 +197,15 @@ export default function TeamsIdeasTable() {
184197 />
185198 < Select
186199 value = { selectedTrack ?? "all" }
187- onValueChange = { ( value ) => setSelectedTrack ( value === "all" ? "" : value ) }
200+ onValueChange = { ( value ) =>
201+ setSelectedTrack ( value === "all" ? "" : value )
202+ }
188203 >
189204 < SelectTrigger className = "w-48 p-6" >
190205 < SelectValue placeholder = "Filter by track" />
191206 </ SelectTrigger >
192- < SelectContent >
193- < SelectItem value = "all" > All Tracks</ SelectItem >
207+ < SelectContent >
208+ < SelectItem value = "all" > All Tracks</ SelectItem >
194209 { availableTracks . map ( ( track ) => (
195210 < SelectItem key = { track } value = { track } >
196211 { track }
@@ -202,12 +217,12 @@ export default function TeamsIdeasTable() {
202217 < DataTable
203218 columns = { columns }
204219 data = { filteredData }
205- handleNextPage = { ( ) => setCurrentPage ( prev => prev + 1 ) }
206- handlePrevPage = { ( ) => setCurrentPage ( prev => prev - 1 ) }
220+ handleNextPage = { ( ) => setCurrentPage ( ( prev ) => prev + 1 ) }
221+ handlePrevPage = { ( ) => setCurrentPage ( ( prev ) => prev - 1 ) }
207222 setPageLimit = { setPageLimit }
208223 pageLimit = { pageLimit }
209224 />
210225 </ CardContent >
211226 </ Card >
212227 ) ;
213- }
228+ }
0 commit comments