Feat: ajout de la liste pour voir les activités et les athlètes en tant que coach/ admin

This commit is contained in:
Amaël Kesteman
2026-01-07 12:00:07 +01:00
parent d35405842d
commit 7a0bbb410f
5 changed files with 206 additions and 4 deletions

View File

@@ -0,0 +1,27 @@
import Dropdown from 'react-bootstrap/Dropdown';
import { Athlete } from '../classes';
type Props = {
onAthletesClick: () => void;
onActivitiesClick: () => void;
}
function ListButton({ onAthletesClick, onActivitiesClick }: Props) {
return (
<Dropdown>
<Dropdown.Toggle>
Sélectionner la ressource
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item as="button" onClick={onAthletesClick}>
Athlètes
</Dropdown.Item>
<Dropdown.Item as="button" onClick={onActivitiesClick}>
Activités
</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
);
}
export default ListButton;

View File

@@ -0,0 +1,47 @@
import ListGroup from "react-bootstrap/ListGroup";
import { Athlete, Activite } from "../classes";
type Props = {
athletes: Athlete[];
activites: Activite[];
};
function AthleteList({ athletes }: Props) {
return (
<ListGroup>
{athletes.map((athlete) => (
<ListGroup.Item key={athlete.id}>
<div>
<strong>Nom:</strong> {athlete.nom}
</div>
<div>
<strong>Groupe:</strong> {athlete.groupe}
</div>
</ListGroup.Item>
))}
</ListGroup>
);
}
function ActiviteList({ activites }: Props) {
return (
<ListGroup>
{activites.map((activite) => (
<ListGroup.Item key={activite.id}>
<div>
<strong>Nom:</strong> {activite.nom}
</div>
<div>
<strong>Thème:</strong> {activite.theme}
</div>
<div>
<strong>Durée:</strong> {activite.duree} minutes
</div>
</ListGroup.Item>
))}
</ListGroup>
);
}
export { AthleteList, ActiviteList };

View File

@@ -0,0 +1,52 @@
import { useState } from "react";
import { useLocalData } from "../context/useLocalData";
import ListButton from "./dropdownButton";
import { AthleteList, ActiviteList } from "./ressourceList";
import { Activite, Athlete } from "../classes";
export default function RessourcePanel() {
const { user } = useLocalData();
const [showAthletes, setShowAthletes] = useState(false);
const [showActivites, setShowActivites] = useState(false);
const athleteMap: Map<number, Athlete> = new Map();
user.sessions.forEach(session => {
session.athletes?.forEach(a => athleteMap.set(a.id, a));
});
const allAthletes: Athlete[] = Array.from(athleteMap.values());
const activiteMap: Map<number, Activite> = new Map();
user.sessions.forEach(session => {
session.activites?.forEach(act => activiteMap.set(act.id, act));
});
const allActivites: Activite[] = Array.from(activiteMap.values());
return (
<div className="ressource_panel">
<ListButton
onAthletesClick={() => {
setShowAthletes(prev => !prev);
setShowActivites(false);
}}
onActivitiesClick={() => {
setShowActivites(prev => !prev);
setShowAthletes(false);
}}
/>
{showAthletes && (
<div className="edt_athletes_panel">
<h3>Liste des athlètes</h3>
<AthleteList athletes={allAthletes} activites={[]}/>
</div>
)}
{showActivites && (
<div className="edt_activites_panel">
<h3>Liste des activités</h3>
<ActiviteList athletes={[]} activites={allActivites} />
</div>
)}
</div>
);
}