Skip to content

Commit a75ff61

Browse files
committed
Add updateInterval, set updateInterval to 15segs #96
falta probar
1 parent 903ae65 commit a75ff61

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

src/components/league/sections/podium.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,15 @@ import { LevelEnum } from "@/models/level.enum";
44
import { Student } from "@/models/student.model";
55
import { 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(() => {

src/components/league/sections/ranking.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { Podium } from "./podium";
44
export 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>

src/components/league/ui/ranking-component.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff 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+
*/
6976
const 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

0 commit comments

Comments
 (0)