Feat: Ajout de la classe ligne pour la partie 2.

This commit is contained in:
Amaël Kesteman
2026-01-07 17:57:18 +01:00
parent 816b1e3965
commit cd4fb99429
3 changed files with 225 additions and 121 deletions

View File

@@ -8,6 +8,13 @@ export class User{
role!: Role; role!: Role;
} }
export class Ligne{
id!: number;
nom!: String;
composition!: Athlete[] //les joueurs compososant la ligne
tempsDeJeu!: number; // en minutes
}
export class Admin extends User{ export class Admin extends User{
role!: Role; role!: Role;
@@ -37,6 +44,7 @@ export class Session{
athletes!: Athlete[] athletes!: Athlete[]
duree! : number; duree! : number;
groupe! : Groupe; groupe! : Groupe;
ligne! : Ligne[];
} }
export class Activite{ export class Activite{
@@ -54,24 +62,6 @@ export function getUserTest():User{
const s1 = new Session(); const s1 = new Session();
const s2 = new Session(); const s2 = new Session();
const s3 = new Session(); const s3 = new Session();
user.id = 0;
user.nom = "Emilien-Yee NootNoot";
user.role = "Coach"
s1.creneau = new Date();
s1.id = 1;
s1.name = "Entrainement Frisbee"
s1.isRecurrent = true;
var date2 = new Date();
date2.setDate(date2.getDate() + 2);
s2.creneau = date2;
s2.id = 2;
s2.isRecurrent = false;
s2.name = "entraintement 2"
s3.creneau = date2;
s3.id = 3;
s3.isRecurrent = false;
s3.name = "entraintement 3"
const athlete1 = new Athlete(); const athlete1 = new Athlete();
athlete1.id = 1; athlete1.id = 1;
athlete1.nom = "Alice Dupont"; athlete1.nom = "Alice Dupont";
@@ -87,6 +77,49 @@ export function getUserTest():User{
athlete3.nom = "Clara Lopez"; athlete3.nom = "Clara Lopez";
athlete3.groupe = "Loisir"; athlete3.groupe = "Loisir";
const ligne1 = new Ligne();
ligne1.id = 1;
ligne1.nom = "Ligne A";
ligne1.composition = [athlete1, athlete2]; // Alice + Bob
ligne1.tempsDeJeu = 45;
const ligne2 = new Ligne();
ligne2.id = 2;
ligne2.nom = "Ligne B";
ligne2.composition = [athlete2, athlete3]; // Bob + Clara
ligne2.tempsDeJeu = 40;
const ligne3 = new Ligne();
ligne3.id = 3;
ligne3.nom = "Ligne C";
ligne3.composition = [athlete1, athlete3]; // Alice + Clara
ligne3.tempsDeJeu = 50;
user.id = 0;
user.nom = "Emilien-Yee NootNoot";
user.role = "Coach"
s1.creneau = new Date();
s1.id = 1;
s1.name = "Entrainement Frisbee"
s1.isRecurrent = true;
s1.ligne = [ligne1];
var date2 = new Date();
date2.setDate(date2.getDate() + 2);
s2.creneau = date2;
s2.id = 2;
s2.isRecurrent = false;
s2.name = "entraintement 2"
s2.ligne = [ligne2];
s3.creneau = date2;
s3.id = 3;
s3.isRecurrent = false;
s3.name = "entraintement 3"
s3.ligne = [ligne3];
s1.athletes = [athlete1, athlete2]; s1.athletes = [athlete1, athlete2];
s2.athletes = [athlete2, athlete3]; s2.athletes = [athlete2, athlete3];
s3.athletes = [athlete1, athlete3]; s3.athletes = [athlete1, athlete3];

View File

@@ -1,9 +1,10 @@
import { Athlete, Activite, Coach, Session } from "../classes"; import { Athlete, Activite, Coach, Session, Ligne } from "../classes";
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[]};
function AthleteList({ athletes }: AthleteListProps) { function AthleteList({ athletes }: AthleteListProps) {
return ( return (
@@ -70,6 +71,9 @@ function SessionList({ sessions }: SessionListProps) {
<div> <div>
<strong>Coach:</strong> {sessions.coach ? sessions.coach.nom : "Pas de coach sur la séance"} <strong>Coach:</strong> {sessions.coach ? sessions.coach.nom : "Pas de coach sur la séance"}
</div> </div>
<div>
<strong>Ligne:</strong> {sessions.ligne ? sessions.ligne.map(ligne => ligne.nom).join(", ") : "Pas de ligne sur la séance"}
</div>
</li> </li>
))} ))}
@@ -77,4 +81,33 @@ function SessionList({ sessions }: SessionListProps) {
); );
} }
export { AthleteList, ActiviteList, CoachList , SessionList }; function LigneList({ lignes }: LigneListProps) {
return (
<ul className="LigneList">
{lignes.map((lignes) => (
<li key={lignes.id}>
<div>
<strong>Nom:</strong> {lignes.nom}
</div>
<div>
<div>
<strong>Composition :</strong>
<ul>
{lignes.composition.map((athlete) => (
<li key={athlete.id}>
{athlete.nom}
</li>
))}
</ul>
</div>
</div>
<div>
<strong>Temps de jeu: {lignes.tempsDeJeu}</strong>
</div>
</li>
))}
</ul>
);
}
export { AthleteList, ActiviteList, CoachList , SessionList, LigneList };

View File

@@ -1,7 +1,7 @@
import { useState } from "react"; import { useState } from "react";
import { useLocalData } from "../context/useLocalData"; import { useLocalData } from "../context/useLocalData";
import { AthleteList, ActiviteList, CoachList, SessionList} from "./ressourceList"; import { AthleteList, ActiviteList, CoachList, SessionList, LigneList} from "./ressourceList";
import { Activite, Athlete, Coach , Session } from "../classes"; import { Activite, Athlete, Coach , Session, Ligne } from "../classes";
export default function RessourcePanel() { export default function RessourcePanel() {
const { user } = useLocalData(); const { user } = useLocalData();
@@ -9,6 +9,7 @@ export default function RessourcePanel() {
const [showActivites, setShowActivites] = useState(false); const [showActivites, setShowActivites] = useState(false);
const [showCoachs,setShowCoachs] = useState(false); const [showCoachs,setShowCoachs] = useState(false);
const [showSessions, setShowSessions] = 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);
if (user.role === "Athlete") return null; if (user.role === "Athlete") return null;
@@ -41,11 +42,24 @@ export default function RessourcePanel() {
const allSessions: Session[] = Array.from(sessionMap.values()); const allSessions: Session[] = Array.from(sessionMap.values());
const ligneMap: Map<number, Ligne> = new Map();
user.sessions.forEach(session => {
if (session.ligne) {
session.ligne.forEach(ligne => {
ligneMap.set(ligne.id, ligne);
});
}
});
const allLignes: Ligne[] = Array.from(ligneMap.values());
function onAthletesClick(): void { function onAthletesClick(): void {
setShowAthletes(prev => !prev); setShowAthletes(prev => !prev);
setShowActivites(false); setShowActivites(false);
setShowCoachs(false); setShowCoachs(false);
setShowSessions(false); setShowSessions(false);
setShowLignes(false);
} }
function onActivitiesClick(): void { function onActivitiesClick(): void {
@@ -53,6 +67,7 @@ export default function RessourcePanel() {
setShowAthletes(false); setShowAthletes(false);
setShowCoachs(false); setShowCoachs(false);
setShowSessions(false); setShowSessions(false);
setShowLignes(false);
} }
@@ -61,6 +76,7 @@ export default function RessourcePanel() {
setShowActivites(false); setShowActivites(false);
setShowAthletes(false); setShowAthletes(false);
setShowSessions(false); setShowSessions(false);
setShowLignes(false);
} }
@@ -69,12 +85,24 @@ export default function RessourcePanel() {
setShowActivites(false); setShowActivites(false);
setShowAthletes(false); setShowAthletes(false);
setShowCoachs(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">
<div>
Sélectionner une ressource:
</div>
<select <select
onChange={(e) => { onChange={(e) => {
const v = (e.target as HTMLSelectElement).value; const v = (e.target as HTMLSelectElement).value;
@@ -82,12 +110,15 @@ export default function RessourcePanel() {
else if (v === "activites") onActivitiesClick(); else if (v === "activites") onActivitiesClick();
else if (v === "coach") onCoachClick(); else if (v === "coach") onCoachClick();
else if (v === "session") onSessionClick(); else if (v === "session") onSessionClick();
else if (v === "lignes") onLigneClick();
else {setShowAthletes(false); setShowActivites(false); setShowCoachs(false); setShowSessions(false)} 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="coach"> Coach</option>}
<option value="session"> Session</option> <option value="session"> Session</option>
<option value="lignes"> Lignes</option>
</select> </select>
{showAthletes && ( {showAthletes && (
@@ -118,6 +149,13 @@ export default function RessourcePanel() {
</div> </div>
)} )}
{showLignes && (
<div className="edt_lignes_panel">
<h3>Liste des lignes</h3>
<LigneList lignes={allLignes} />
</div>
)}
</div> </div>