import React, {useEffect, useState} from 'react'; import {ActivityIndicator, ScrollView, StyleSheet, Text, TextInput, View} from 'react-native'; import Screen from '../layout/Screen'; import {Button, ButtonTray} from '../UI/Button'; import useGameHook from '../../hooks/useGameHook'; import {getSession, setSessionTeam} from '../../hooks/SessionStore'; const TeamScreen = () => { // Initialisation ------------ const session = getSession(); const {getTeam, createTeam, joinTeamByCode, getTeamMembers, leaveTeam, getUser, updateUser} = useGameHook(); // State ---------------------- const [activeTid, setActiveTid] = useState(session.currentTid); const [teamCode, setTeamCode] = useState(''); const [team, setTeam] = useState(null); const [members, setMembers] = useState([]); const [memberNames, setMemberNames] = useState({}); const [loading, setLoading] = useState(true); // Handlers ------------------- useEffect(() => { const load = async () => { if (activeTid) { const t = await getTeam(activeTid); setTeam(t); const ms = await getTeamMembers(activeTid); setMembers(ms || []); const names = {}; for (const m of (ms || [])) { const u = await getUser(m.Uid); if (u) names[m.Uid] = u.username; } setMemberNames(names); } setLoading(false); }; load(); }, [activeTid]); const handleJoinTeam = async () => { if (!teamCode.trim()) return; const result = await joinTeamByCode({JoinCode: teamCode.trim(), Uid: session.currentUid}); if (!result) return; setSessionTeam(result.Tid); setActiveTid(result.Tid); }; const handleCreateTeam = async () => { if (!session.currentGid) return; const result = await createTeam({Gid: session.currentGid, TeamName: 'My Team'}); if (!result) return; const membership = await joinTeamByCode({Tid: result.Tid, Uid: session.currentUid}); if (membership) { setSessionTeam(result.Tid); setActiveTid(result.Tid); } }; const handleLeaveTeam = async () => { const myMembership = members.find((m) => m.Uid === session.currentUid); if (!myMembership) return; await leaveTeam(myMembership.id); await updateUser(session.currentUid, {TGid: null}); setSessionTeam(null); setActiveTid(null); setTeam(null); setMembers([]); setMemberNames({}); }; // View ----------------------- if (loading) { return ( ); } // Not in a team if (!activeTid || !team) { return (