feat: load players in session

This commit is contained in:
julius 2025-05-21 14:55:13 +02:00
parent 241f6fa7eb
commit de8dc6b9b9
Signed by: julius
GPG Key ID: C80A63E6A5FD7092
4 changed files with 16 additions and 17 deletions

View File

@ -15,7 +15,7 @@ export default function Footer() {
</Link> </Link>
<span>|</span> <span>|</span>
<Link to="/network"> <Link to="/network">
<span>Trainer Analysis</span> <span>Sociogram</span>
</Link> </Link>
<span>|</span> <span>|</span>
<Link to="/mvp"> <Link to="/mvp">

View File

@ -1,6 +1,6 @@
import { ButtonHTMLAttributes, useEffect, useRef, useState } from "react"; import { ButtonHTMLAttributes, useEffect, useRef, useState } from "react";
import { ReactSortable, ReactSortableProps } from "react-sortablejs"; import { ReactSortable, ReactSortableProps } from "react-sortablejs";
import { apiAuth, loadPlayers, User } from "./api"; import { apiAuth, User } from "./api";
import { TeamState, useSession } from "./Session"; import { TeamState, useSession } from "./Session";
import { Chemistry, MVPRanking, PlayerType } from "./types"; import { Chemistry, MVPRanking, PlayerType } from "./types";
import TabController from "./TabController"; import TabController from "./TabController";
@ -451,14 +451,7 @@ function HeaderControl({ onLoad, onClear }: HeaderControlProps) {
} }
export default function Rankings() { export default function Rankings() {
const { user, teams } = useSession(); const { user, teams, players } = useSession();
const [players, setPlayers] = useState<User[] | null>(null);
useEffect(() => {
if (teams) {
loadPlayers(teams.activeTeam).then((data) => setPlayers(data));
}
}, [user, teams]);
const tabs = [ const tabs = [
{ id: "Chemistry", label: "🧪 Chemistry" }, { id: "Chemistry", label: "🧪 Chemistry" },

View File

@ -24,6 +24,7 @@ export interface Session {
teams: TeamState | null; teams: TeamState | null;
setTeams: (teams: TeamState) => void; setTeams: (teams: TeamState) => void;
players: User[] | null; players: User[] | null;
reloadPlayers: () => void;
onLogout: () => void; onLogout: () => void;
} }
@ -32,6 +33,7 @@ const sessionContext = createContext<Session>({
teams: null, teams: null,
setTeams: () => {}, setTeams: () => {},
players: null, players: null,
reloadPlayers: () => {},
onLogout: () => {}, onLogout: () => {},
}); });
@ -63,6 +65,10 @@ export function SessionProvider(props: SessionProviderProps) {
if (teams) setTeams({ teams: teams, activeTeam: teams[0].id }); if (teams) setTeams({ teams: teams, activeTeam: teams[0].id });
} }
async function reloadPlayers() {
teams && loadPlayers(teams?.activeTeam).then((data) => setPlayers(data));
}
useEffect(() => { useEffect(() => {
loadUser(); loadUser();
}, []); }, []);
@ -70,7 +76,7 @@ export function SessionProvider(props: SessionProviderProps) {
loadTeam(); loadTeam();
}, [user]); }, [user]);
useEffect(() => { useEffect(() => {
teams && loadPlayers(teams?.activeTeam).then((data) => setPlayers(data)); reloadPlayers();
}, [teams]); }, [teams]);
function onLogin(user: User) { function onLogin(user: User) {
@ -103,7 +109,7 @@ export function SessionProvider(props: SessionProviderProps) {
} else } else
content = ( content = (
<sessionContext.Provider <sessionContext.Provider
value={{ user, teams, setTeams, players, onLogout }} value={{ user, teams, setTeams, players, reloadPlayers, onLogout }}
> >
{children} {children}
</sessionContext.Provider> </sessionContext.Provider>

View File

@ -1,12 +1,12 @@
import { FormEvent, useEffect, useState } from "react"; import { FormEvent, useEffect, useState } from "react";
import { apiAuth, Gender, loadPlayers, User } from "./api"; import { apiAuth, Gender, User } from "./api";
import { useSession } from "./Session"; import { useSession } from "./Session";
import { ErrorState } from "./types"; import { ErrorState } from "./types";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import Calendar from "./Calendar"; import Calendar from "./Calendar";
const TeamPanel = () => { const TeamPanel = () => {
const { user, teams, players } = useSession(); const { user, teams, players, reloadPlayers } = useSession();
const navigate = useNavigate(); const navigate = useNavigate();
useEffect(() => { useEffect(() => {
user?.scopes.includes(`team:${teams?.activeTeam}`) || user?.scopes.includes(`team:${teams?.activeTeam}`) ||
@ -32,14 +32,14 @@ const TeamPanel = () => {
if (r.detail) setError({ ok: false, message: r.detail }); if (r.detail) setError({ ok: false, message: r.detail });
else { else {
setError({ ok: true, message: r }); setError({ ok: true, message: r });
loadPlayers(teams.activeTeam).then((data) => setPlayers(data)); reloadPlayers();
} }
} else { } else {
const r = await apiAuth(`player/${teams?.activeTeam}`, player, "PUT"); const r = await apiAuth(`player/${teams?.activeTeam}`, player, "PUT");
if (r.detail) setError({ ok: false, message: r.detail }); if (r.detail) setError({ ok: false, message: r.detail });
else { else {
setError({ ok: true, message: r }); setError({ ok: true, message: r });
loadPlayers(teams.activeTeam).then((data) => setPlayers(data)); reloadPlayers();
} }
} }
} }
@ -59,7 +59,7 @@ const TeamPanel = () => {
else { else {
setError({ ok: true, message: r }); setError({ ok: true, message: r });
setPlayer(newPlayerTemplate); setPlayer(newPlayerTemplate);
loadPlayers(teams.activeTeam).then((data) => setPlayers(data)); reloadPlayers();
} }
} }
} }