Merge remote-tracking branch 'refs/remotes/origin/main'

This commit is contained in:
Alexis Leboeuf
2026-01-08 09:15:53 +01:00
5 changed files with 67 additions and 70 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,16 +1,19 @@
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 { unescapeLeadingUnderscores } from "typescript";
export type keyWord = "athletes" | "activites" | "coachs" | "sessions"| "lignes";
export default function RessourcePanel() { export default function RessourcePanel() {
const { user } = useLocalData(); const { user } = useLocalData();
const [showAthletes, setShowAthletes] = useState(false); const [value,setValue] = useState<keyWord>("athletes");
const [showActivites, setShowActivites] = useState(false);
const [showCoachs,setShowCoachs] = useState(false);
const [showSessions, setShowSessions] = useState(false);
const [showLignes, setShowLignes] = useState(false);
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,51 +55,18 @@
} }
}); });
const allLignes: Ligne[] = Array.from(ligneMap.values());
function onAthletesClick(): void { const allLignes: Ligne[] = Array.from(ligneMap.values());
setShowAthletes(prev => !prev);
setShowActivites(false);
setShowCoachs(false);
setShowSessions(false);
setShowLignes(false);
} // Calculer le temps de jeu pour chaque ligne
function onActivitiesClick(): void { const tempsDeJeuParLigne: Map<number, number> = new Map();
setShowActivites(prev => !prev); allLignes.forEach(ligne => {
setShowAthletes(false); const tempsTotal = calculTempsDeJeuParLigne(allSessions, ligne);
setShowCoachs(false); tempsDeJeuParLigne.set(ligne.id, tempsTotal);
setShowSessions(false); ligne.tempsDeJeu = tempsTotal;
setShowLignes(false); });
}
function onCoachClick(): void {
setShowCoachs(prev => !prev);
setShowActivites(false);
setShowAthletes(false);
setShowSessions(false);
setShowLignes(false);
}
function onSessionClick(): void {
setShowSessions(prev => !prev);
setShowActivites(false);
setShowAthletes(false);
setShowCoachs(false);
setShowLignes(false);
}
function onLigneClick():void{
setShowLignes(prev => !prev);
setShowAthletes(false);
setShowActivites(false);
setShowCoachs(false);
setShowSessions(false);
}
return ( return (
<div className="ressource_panel"> <div className="ressource_panel">
@@ -106,53 +76,48 @@
<select <select
onChange={(e) => { onChange={(e) => {
const v = (e.target as HTMLSelectElement).value; const v = (e.target as HTMLSelectElement).value;
if (v === "athletes") onAthletesClick(); setValue(v as keyWord)
else if (v === "activites") onActivitiesClick();
else if (v === "coach") onCoachClick();
else if (v === "session") onSessionClick();
else if (v === "lignes") onLigneClick();
else {setShowAthletes(false); setShowActivites(false); setShowCoachs(false); setShowSessions(false)}
}}> }}>
<option value="athletes">Athlètes</option> <option value="athletes">Athlètes</option>
<option value="activites">Activités</option> <option value="activites">Activités</option>
{user.role === "Admin" && <option value="coach"> Coach</option>} {user.role === "Admin" && <option value="coachs"> Coachs</option>}
<option value="session"> Session</option> <option value="sessions"> Sessions</option>
<option value="lignes"> Lignes</option> <option value="lignes"> Lignes</option>
</select> </select>
{showAthletes && ( {value==="athletes" && (
<div className="edt_athletes_panel"> <div className="edt_athletes_panel">
<h3>Liste des athlètes</h3> <h3>Liste des athlètes</h3>
<AthleteList athletes={allAthletes} /> <AthleteList athletes={allAthletes} />
</div> </div>
)} )}
{showActivites && ( {value==="activites" && (
<div className="edt_activites_panel"> <div className="edt_activites_panel">
<h3>Liste des activités</h3> <h3>Liste des activités</h3>
<ActiviteList activites={allActivites} /> <ActiviteList activites={allActivites} />
</div> </div>
)} )}
{showCoachs && ( {value==="coachs" && (
<div className="edt_coachs_panel"> <div className="edt_coachs_panel">
<h3>Liste des coachs</h3> <h3>Liste des coachs</h3>
<CoachList coachs={allCoachs} /> <CoachList coachs={allCoachs} />
</div> </div>
)} )}
{showSessions && ( {value==="sessions" && (
<div className="edt_sessions_panel"> <div className="edt_sessions_panel">
<h3>Liste des sessions</h3> <h3>Liste des sessions</h3>
<SessionList sessions={allSessions} /> <SessionList sessions={allSessions} />
</div> </div>
)} )}
{showLignes && ( {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

@@ -68,7 +68,17 @@ code {
input{ input{
background-color: var(--tint2); background-color: var(--tint2);
color: var(--test); color: var(--text);
border-color: var(--tint5); border-color: var(--tint5);
border-radius: 8px; border-radius: 8px;
} }
button{
color: var(--text);
background-color: var(--tint3);
}
select{
color: var(--text);
background-color: var(--tint3);
}

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;
}