Feat: Calcul de temps de jeu total pour les lignes

This commit is contained in:
Amaël Kesteman
2026-01-08 08:58:26 +01:00
parent 7c6ee6b65f
commit 0a5d7bccd5
4 changed files with 44 additions and 10 deletions

View File

@@ -106,6 +106,7 @@ export function getUserTest():User{
s1.name = "Entrainement Frisbee" s1.name = "Entrainement Frisbee"
s1.isRecurrent = true; s1.isRecurrent = true;
s1.ligne = [ligne1]; s1.ligne = [ligne1];
s1.duree= 90;
var date2 = new Date(); var date2 = new Date();
date2.setDate(date2.getDate() + 2); date2.setDate(date2.getDate() + 2);
s2.creneau = date2; s2.creneau = date2;
@@ -113,11 +114,13 @@ export function getUserTest():User{
s2.isRecurrent = false; s2.isRecurrent = false;
s2.name = "entraintement 2" s2.name = "entraintement 2"
s2.ligne = [ligne2]; s2.ligne = [ligne2];
s2.duree= 120;
s3.creneau = date2; s3.creneau = date2;
s3.id = 3; s3.id = 3;
s3.isRecurrent = false; s3.isRecurrent = false;
s3.name = "entraintement 3" s3.name = "entraintement 3"
s3.ligne = [ligne3]; s3.ligne = [ligne3, ligne1];
s3.duree= 120;

View File

@@ -1,10 +1,12 @@
import { Athlete, Activite, Coach, Session, Ligne } from "../classes"; import { Athlete, Activite, Coach, Session, Ligne } from "../classes";
import {calculTempsDeJeuParLigne} from "../utils/ligneUtils";
type AthleteListProps = { athletes: Athlete[] }; type AthleteListProps = { athletes: Athlete[] };
type ActiviteListProps = { activites: Activite[] }; type ActiviteListProps = { activites: Activite[] };
type CoachListProps = { coachs: Coach[] }; type CoachListProps = { coachs: Coach[] };
type SessionListProps = { sessions: Session[]}; type SessionListProps = { sessions: Session[]};
type LigneListProps = { lignes: Ligne[]}; type LigneListProps = { lignes: Ligne[], tempsDeJeuParLigne: Map<number, number> };
function AthleteList({ athletes }: AthleteListProps) { function AthleteList({ athletes }: AthleteListProps) {
return ( return (
@@ -81,7 +83,7 @@ function SessionList({ sessions }: SessionListProps) {
); );
} }
function LigneList({ lignes }: LigneListProps) { function LigneList({ lignes, tempsDeJeuParLigne }: LigneListProps) {
return ( return (
<ul className="LigneList"> <ul className="LigneList">
{lignes.map((lignes) => ( {lignes.map((lignes) => (
@@ -102,7 +104,8 @@ function LigneList({ lignes }: LigneListProps) {
</div> </div>
</div> </div>
<div> <div>
<strong>Temps de jeu: {lignes.tempsDeJeu}</strong> <strong>Temps de jeu total :</strong>{" "}
{tempsDeJeuParLigne.get(lignes.id) ?? 0} min
</div> </div>
</li> </li>
))} ))}

View File

@@ -1,8 +1,10 @@
import { useState } from "react"; import { useState } from "react";
import { useLocalData } from "../context/useLocalData"; import { useLocalData } from "../context/useLocalData";
import { AthleteList, ActiviteList, CoachList, SessionList, LigneList} from "./ressourceList"; import { AthleteList, ActiviteList, CoachList, SessionList, LigneList} from "./ressourceList";
import { Activite, Athlete, Coach , Session, Ligne } from "../classes"; import { Activite, Athlete, Coach , Session, Ligne } from "../classes";
import {calculTempsDeJeuParLigne} from "../utils/ligneUtils";
import { keyboard } from "@testing-library/user-event/dist/keyboard"; import { keyboard } from "@testing-library/user-event/dist/keyboard";
import { unescapeLeadingUnderscores } from "typescript";
export type keyWord = "athletes" | "activites" | "coachs" | "sessions"| "lignes"; export type keyWord = "athletes" | "activites" | "coachs" | "sessions"| "lignes";
@@ -11,6 +13,7 @@ import { keyboard } from "@testing-library/user-event/dist/keyboard";
const { user } = useLocalData(); const { user } = useLocalData();
const [value,setValue] = useState<keyWord>("athletes"); const [value,setValue] = useState<keyWord>("athletes");
console.log("Rôle utilisateur:", user.role); console.log("Rôle utilisateur:", user.role);
console.log("name", user.nom);
if (user.role === "Athlete") return null; if (user.role === "Athlete") return null;
@@ -52,8 +55,17 @@ import { keyboard } from "@testing-library/user-event/dist/keyboard";
} }
}); });
const allLignes: Ligne[] = Array.from(ligneMap.values()); const allLignes: Ligne[] = Array.from(ligneMap.values());
// Calculer le temps de jeu pour chaque ligne
const tempsDeJeuParLigne: Map<number, number> = new Map();
allLignes.forEach(ligne => {
const tempsTotal = calculTempsDeJeuParLigne(allSessions, ligne);
tempsDeJeuParLigne.set(ligne.id, tempsTotal);
ligne.tempsDeJeu = tempsTotal;
});
return ( return (
@@ -105,7 +117,7 @@ import { keyboard } from "@testing-library/user-event/dist/keyboard";
{value==="lignes" && ( {value==="lignes" && (
<div className="edt_lignes_panel"> <div className="edt_lignes_panel">
<h3>Liste des lignes</h3> <h3>Liste des lignes</h3>
<LigneList lignes={allLignes} /> <LigneList lignes={allLignes} tempsDeJeuParLigne={tempsDeJeuParLigne}/>
</div> </div>
)} )}

View File

@@ -0,0 +1,16 @@
import {Ligne, Session} from '../classes';
//Temps de jeu cumulé par ligne
export function calculTempsDeJeuParLigne(sessions: Session[], ligne : Ligne): number {
let tempsDeJeuTotal = 0;
sessions.forEach(session => {
// Vérifier si la ligne est présente dans la session
if (session.ligne && session.ligne.some(l => l.id === ligne.id)) {
tempsDeJeuTotal += session.duree;
}
});
return tempsDeJeuTotal;
}