Feat: Ajout de la liste des athlètes + correction visuelle detailSession

This commit is contained in:
Amaël Kesteman
2026-01-10 18:56:45 +01:00
parent e85f76c810
commit 3a74f6b52d
2 changed files with 26 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Activite, Athlete, Session } from "../../classes"; import { Activite, Admin, Athlete, Coach, Session } from "../../classes";
import { dateToString, hoursToString } from "../edt"; import { dateToString, hoursToString } from "../edt";
import { Modal } from "../Modal"; import { Modal } from "../Modal";
import CreateActivite from "../createActivite"; import CreateActivite from "../createActivite";
@@ -22,6 +22,8 @@ function DetailSession({session,open,setOpen}:Props){
const [loading,setLoading] = useState<boolean>(false); const [loading,setLoading] = useState<boolean>(false);
const [join,setJoin] = useState<boolean>(user instanceof Athlete && user.sessions.includes(session)); const [join,setJoin] = useState<boolean>(user instanceof Athlete && user.sessions.includes(session));
//Vérification pour l'ajout et la suppression des activités
const canEdit = user instanceof Admin || user instanceof Coach;
const sDate = session.creneau; const sDate = session.creneau;
function handleDeleteActivite(activite:Activite): void { function handleDeleteActivite(activite:Activite): void {
@@ -108,11 +110,15 @@ function DetailSession({session,open,setOpen}:Props){
{activites.map((activite,index)=>( {activites.map((activite,index)=>(
<div> <div>
{activite.nom} {activite.nom}
<button className="deleteButton" onClick={() => handleDeleteActivite(activite)}>x</button> {canEdit && (
</div> <button className="deleteButton" onClick={() => handleDeleteActivite(activite)}>x</button>
)}
</div>
))} ))}
<button className="addButton" onClick={() => handleAddActivite()}>+</button> {canEdit && (
{loading && <div className='top_left_loading'><Loading/></div>} <button className="addButton" onClick={() => handleAddActivite()}>+</button>
)}
{loading && <div className='top_left_loading'><Loading/></div>}
</div> </div>
</div> </div>

View File

@@ -18,12 +18,22 @@ type Props = {
function ObjectUser({admin=null,athlete=null,coach=null}:Props){ function ObjectUser({admin=null,athlete=null,coach=null}:Props){
const {user,setUser} = useLocalData() const {user,setUser} = useLocalData()
const[user2,setUser2]= useState<User>(getUser()); const[user2,setUser2]= useState<User>(getUser());
const [open, setOpen] = useState<boolean>(false); const [open, setOpen] = useState<boolean>(false);
const [open2, setOpen2] = useState<boolean>(false); const [open2, setOpen2] = useState<boolean>(false);
const [loading,setLoading] = useState<boolean>(false); const [loading,setLoading] = useState<boolean>(false);
const [sessions,setSessions] = useState<Session[]>([]);
// Initialisation sécurisée des sessions
function getInitialSessions(): Session[] {
if (athlete) return [...(athlete.sessions || [])];
if (coach) return [...(coach.sessions || [])];
return [];
}
const [sessions, setSessions] = useState<Session[]>(getInitialSessions());
function getUser(): User{ function getUser(): User{
if(admin!=null) return admin; if(admin!=null) return admin;
@@ -75,7 +85,7 @@ function ObjectUser({admin=null,athlete=null,coach=null}:Props){
useEffect(() => { useEffect(() => {
if(!loading){ if(!loading){
if(athlete!==null){ if(athlete!==null){
setSessions([...athlete.sessions]) setSessions([...(athlete.sessions || [])]);
} }
if(coach!==null){ if(coach!==null){
setSessions([...coach.sessions]) setSessions([...coach.sessions])
@@ -87,6 +97,7 @@ function ObjectUser({admin=null,athlete=null,coach=null}:Props){
function returnSession(session: Session|null){ function returnSession(session: Session|null){
if(session!==null){ if(session!==null){
if(athlete!==null){ if(athlete!==null){
athlete.sessions = athlete.sessions || [];
athlete.sessions.push(session); athlete.sessions.push(session);
setSessions([...athlete.sessions]) setSessions([...athlete.sessions])
} }
@@ -101,7 +112,7 @@ function ObjectUser({admin=null,athlete=null,coach=null}:Props){
return( return(
<div> <div>
<div className="object" onClick={() => handleOpen()}> <div className="object" onClick={() => handleOpen()}>
<div>{user2.nom}</div> <div>{user2.prenom} {user2.nom}</div>
{/* <div>{user2.role}</div> */} {/* <div>{user2.role}</div> */}
</div> </div>
@@ -117,7 +128,7 @@ function ObjectUser({admin=null,athlete=null,coach=null}:Props){
</div> </div>
{athlete !== null && ( {athlete !== null && (
<div className="stats-container"> <div className="stats-container">
<StatAthlete athlete={athlete} sessions={sessions} /> <StatAthlete athlete={athlete} sessions={athlete?.sessions || []} />
</div> </div>
)} )}
</div> </div>