import React, {useCallback, useEffect, useState} from 'react'; import {ActivityIndicator, ScrollView, StyleSheet, Text, View} from 'react-native'; import Screen from '../layout/Screen'; import Card from '../UI/Card'; import {Button} from '../UI/Button'; import useGameHook from '../../hooks/useGameHook'; import {getSession} from '../../hooks/SessionStore'; const PlayersScreen = () => { // Initialisation ------------ const session = getSession(); const {getTeams, getTeamMembers, getGroupMembers, removeMember, getUser} = useGameHook(); // State ---------------------- const [loading, setLoading] = useState(true); const [players, setPlayers] = useState([]); // Handlers ------------------- const loadData = useCallback(async () => { if (!session.currentGid) { setLoading(false); return; } // Get all non-admin players const allMembers = await getGroupMembers(session.currentGid); const nonAdminMembers = (allMembers || []).filter((m) => !m.IsAcceptedAdmin); // Build team lookup: { Uid -> { teamCode, teamName, isLeader } } const allTeams = await getTeams(session.currentGid); const teamInfoByUid = {}; for (const team of (allTeams || [])) { const tms = await getTeamMembers(team.Tid); for (const tm of (tms || [])) { teamInfoByUid[tm.Uid] = { teamCode: team.JoinCode, teamName: team.TeamName, isLeader: Boolean(tm.IsLeader), }; } } // Build player list const playerList = []; for (const m of nonAdminMembers) { const user = await getUser(m.Uid); if (user) { playerList.push({ ...user, membershipId: m.id, team: teamInfoByUid[m.Uid] || null, }); } } setPlayers(playerList); setLoading(false); }, [session.currentGid]); useEffect(() => { loadData(); }, [loadData]); const handleRemovePlayer = async (membershipId) => { await removeMember(membershipId); await loadData(); }; // View ----------------------- if (loading) { return ( ); } if (!session.currentGid) { return ( Create or join a game first. ); } return ( Players {players.map((player) => ( {player.username} {player.team?.isLeader && ( (Team Leader) )} {player.team && ( {player.team.teamCode} )}