File tree Expand file tree Collapse file tree 3 files changed +42
-6
lines changed
Expand file tree Collapse file tree 3 files changed +42
-6
lines changed Original file line number Diff line number Diff line change @@ -4,7 +4,15 @@ import { LevelEnum } from "@/models/level.enum";
44import { Student } from "@/models/student.model" ;
55import { useEffect , useState } from "react" ;
66
7- export function Podium ( ) {
7+ /**
8+ * Muestra a los 3 mejores estudiantes de la liga
9+ * @param updateInterval segundos para actualizar la información, 0 para no actualizar la información
10+ */
11+ export function Podium ( {
12+ updateInterval = 0
13+ } : {
14+ updateInterval ?: number
15+ } ) {
816 const [ loading , setloading ] = useState < boolean > ( true ) ;
917
1018 const [ students , setStudents ] = useState <
@@ -38,7 +46,16 @@ export function Podium() {
3846 useEffect ( ( ) => {
3947 handlerGetPodiumStudents ( ) ;
4048 setloading ( false ) ;
41- } , [ ] ) ;
49+
50+ if ( updateInterval > 0 ) {
51+ const interval = setInterval ( ( ) => {
52+ console . log ( "actualizado" )
53+ handlerGetPodiumStudents ( ) ;
54+ } , updateInterval * 1000 ) ;
55+
56+ return ( ) => clearInterval ( interval ) ;
57+ }
58+ } , [ updateInterval ] ) ;
4259
4360 useEffect ( ( ) => {
4461 setSortedStudents ( ( ) => {
Original file line number Diff line number Diff line change @@ -4,11 +4,11 @@ import { Podium } from "./podium";
44export const Ranking = ( ) => {
55 return (
66 < div >
7- < Podium />
7+ < Podium updateInterval = { 15 } />
88 < RankingComponent . RankingContainer >
99 < RankingComponent . Padding className = "max-w-[65rem] mx-auto" >
1010 < p className = "text-lg font-semibold text-center" > Ranking</ p >
11- < RankingComponent . RankingList student_number = { 5 } offset = { 3 } />
11+ < RankingComponent . RankingList student_number = { 5 } offset = { 3 } updateInterval = { 15 } />
1212 </ RankingComponent . Padding >
1313 </ RankingComponent . RankingContainer >
1414 </ div >
Original file line number Diff line number Diff line change @@ -66,14 +66,23 @@ const StudentComponent = ({
6666 ) ;
6767} ;
6868
69+ /**
70+ * Muestra la información de `student_number` estudiantes
71+ * @param className clases normales de html, se puede agregar tailwind sin problema (a pesar que no sirva el autocompletado a veces)
72+ * @param student_number cantidad de estudiantes maxima que puede mostrar el ranking
73+ * @param offset cantidad de estudiantes a ignorar, se implemento para poner arriba el podio
74+ * @param updateInterval segundos para actualizar la información, 0 para no actualizar la información
75+ */
6976const RankingList = ( {
7077 className = "" ,
7178 student_number = 20 ,
7279 offset = 0 ,
80+ updateInterval = 0
7381} : {
7482 className ?: string ;
7583 student_number ?: number ;
7684 offset ?: number ,
85+ updateInterval ?: number
7786} ) => {
7887 const SKELETON_RANKING_USERS_COUNT = 5 ;
7988
@@ -106,7 +115,15 @@ const RankingList = ({
106115
107116 useEffect ( ( ) => {
108117 handlerGetRankingStudents ( ) ;
109- } , [ ] ) ;
118+
119+ if ( updateInterval > 0 ) {
120+ const interval = setInterval ( ( ) => {
121+ handlerGetRankingStudents ( ) ;
122+ } , updateInterval * 1000 ) ;
123+
124+ return ( ) => clearInterval ( interval ) ;
125+ }
126+ } , [ updateInterval ] ) ;
110127
111128 return (
112129 < div className = { `flex flex-col gap-2 ${ className } ` } >
@@ -119,8 +136,10 @@ const RankingList = ({
119136 ) ;
120137} ;
121138
122- export default {
139+ const exp = {
123140 RankingContainer,
124141 Padding,
125142 RankingList,
126143} ;
144+
145+ export default exp
You can’t perform that action at this time.
0 commit comments