Remove forced gameday player expansion

This commit is contained in:
Codex
2026-04-23 12:30:25 -05:00
parent 7773f9521a
commit a26a611d3b

View File

@@ -55,13 +55,10 @@ export function GamedayPage() {
const walkup = useWalkupContext(); const walkup = useWalkupContext();
const [searchParams, setSearchParams] = useSearchParams(); const [searchParams, setSearchParams] = useSearchParams();
const [selectedGameId, setSelectedGameId] = useState(searchParams.get("gameId") ?? ""); const [selectedGameId, setSelectedGameId] = useState(searchParams.get("gameId") ?? "");
const [selectedPlayerId, setSelectedPlayerId] = useState("");
const [expandedPlayerId, setExpandedPlayerId] = useState(""); const [expandedPlayerId, setExpandedPlayerId] = useState("");
const [playerFilter, setPlayerFilter] = useState<"players" | "nonPlayers" | "all">("players"); const [playerFilter, setPlayerFilter] = useState<"players" | "nonPlayers" | "all">("players");
const [playerFilterMenuOpen, setPlayerFilterMenuOpen] = useState(false); const [playerFilterMenuOpen, setPlayerFilterMenuOpen] = useState(false);
const selectedPlayerWasManualRef = useRef(false);
const playerFilterMenuRef = useRef<HTMLDivElement | null>(null); const playerFilterMenuRef = useRef<HTMLDivElement | null>(null);
const hasInitializedExpandedPlayerRef = useRef(false);
const teamId = walkup.selectedTeamId; const teamId = walkup.selectedTeamId;
const { const {
activeKey: playingClipKey, activeKey: playingClipKey,
@@ -86,13 +83,8 @@ export function GamedayPage() {
useEffect(() => { useEffect(() => {
stopClip(); stopClip();
setExpandedPlayerId(""); setExpandedPlayerId("");
hasInitializedExpandedPlayerRef.current = false;
}, [selectedGameId, stopClip]); }, [selectedGameId, stopClip]);
useEffect(() => {
stopClip();
}, [selectedPlayerId, stopClip]);
useEffect(() => { useEffect(() => {
if (!playerFilterMenuOpen) { if (!playerFilterMenuOpen) {
return; return;
@@ -155,64 +147,10 @@ export function GamedayPage() {
? orderedMembers ? orderedMembers
: orderedMembers.filter((member) => (playerFilter === "players" ? isPlayerMember(member) : !isPlayerMember(member))); : orderedMembers.filter((member) => (playerFilter === "players" ? isPlayerMember(member) : !isPlayerMember(member)));
useEffect(() => {
if (!selectedGameId || !visibleMembers.length) {
return;
}
if (!selectedPlayerId || !selectedPlayerWasManualRef.current) {
setSelectedPlayerId(String(visibleMembers[0].id));
}
}, [selectedGameId, selectedPlayerId, visibleMembers]);
useEffect(() => {
if (!visibleMembers.length) {
setExpandedPlayerId("");
hasInitializedExpandedPlayerRef.current = false;
return;
}
const expandedStillVisible = visibleMembers.some((member) => String(member.id) === expandedPlayerId);
if (!hasInitializedExpandedPlayerRef.current) {
setExpandedPlayerId(String(visibleMembers[0].id));
hasInitializedExpandedPlayerRef.current = true;
return;
}
if (expandedPlayerId && !expandedStillVisible) {
setExpandedPlayerId(String(visibleMembers[0].id));
}
}, [expandedPlayerId, visibleMembers]);
useEffect(() => {
if (!selectedPlayerId) {
return;
}
const selectedIsVisible = visibleMembers.some((member) => String(member.id) === selectedPlayerId);
if (!selectedIsVisible) {
selectedPlayerWasManualRef.current = false;
setSelectedPlayerId(visibleMembers[0] ? String(visibleMembers[0].id) : "");
}
}, [selectedPlayerId, visibleMembers]);
const selectedPlayer =
walkup.members.find((member) => String(member.id) === selectedPlayerId) ??
(selectedPlayerId ? { id: selectedPlayerId } : null);
const selectedPinnedAssignments = useMemo(
() => assignmentList.filter((assignment) => assignment.external_player_id === selectedPlayerId),
[assignmentList, selectedPlayerId],
);
const selectedPinnedAssignmentByClipId = useMemo(
() => new Map(selectedPinnedAssignments.map((assignment) => [String(assignment.clip_id), assignment])),
[selectedPinnedAssignments],
);
const selectedGame = walkup.games.find((game) => String(game.id) === selectedGameId) ?? null; const selectedGame = walkup.games.find((game) => String(game.id) === selectedGameId) ?? null;
function selectGame(gameId: string) { function selectGame(gameId: string) {
selectedPlayerWasManualRef.current = false;
setSelectedGameId(gameId); setSelectedGameId(gameId);
setSelectedPlayerId("");
setExpandedPlayerId(""); setExpandedPlayerId("");
stopClip(); stopClip();
setSearchParams({ gameId }); setSearchParams({ gameId });
@@ -222,17 +160,6 @@ export function GamedayPage() {
fadeOutClip(durationMs); fadeOutClip(durationMs);
} }
async function playClip(clip: AudioClip) {
await playClipPreview({
key: clipKey("library", clip.id),
url: clip.normalized_url,
startMs: clip.start_ms,
endMs: clip.end_ms,
title: clip.label,
subtitle: formatMemberName(selectedPlayer),
});
}
if (!walkup.isTeamSnap) { if (!walkup.isTeamSnap) {
return ( return (
<section className="page-grid"> <section className="page-grid">
@@ -370,8 +297,6 @@ export function GamedayPage() {
isExpanded ? " btn-outline-primary" : " btn-light" isExpanded ? " btn-outline-primary" : " btn-light"
}`} }`}
onClick={() => { onClick={() => {
selectedPlayerWasManualRef.current = true;
setSelectedPlayerId(memberId);
setExpandedPlayerId((current) => (current === memberId ? "" : memberId)); setExpandedPlayerId((current) => (current === memberId ? "" : memberId));
}} }}
aria-expanded={isExpanded} aria-expanded={isExpanded}
@@ -410,10 +335,23 @@ export function GamedayPage() {
<div className="list-group list-group-flush"> <div className="list-group list-group-flush">
<LibraryClips <LibraryClips
teamId={teamId} teamId={teamId}
playerId={selectedPlayerId} playerId={memberId}
playingClipKey={playingClipKey} playingClipKey={playingClipKey}
onPlayClip={playClip} onPlayClip={(clip) =>
pinnedAssignmentsByClipId={selectedPinnedAssignmentByClipId} playClipPreview({
key: clipKey("library", clip.id),
url: clip.normalized_url,
startMs: clip.start_ms,
endMs: clip.end_ms,
title: clip.label,
subtitle: formatMemberName(member),
})
}
pinnedAssignmentsByClipId={new Map(
assignmentList
.filter((assignment) => assignment.external_player_id === memberId)
.map((assignment) => [String(assignment.clip_id), assignment]),
)}
/> />
</div> </div>
</div> </div>
@@ -423,7 +361,7 @@ export function GamedayPage() {
<pre className="mt-2 mb-0 rounded-3 bg-body-tertiary p-3 small text-body-secondary overflow-auto"> <pre className="mt-2 mb-0 rounded-3 bg-body-tertiary p-3 small text-body-secondary overflow-auto">
{JSON.stringify( {JSON.stringify(
{ {
selectedPlayerId, expandedPlayerId,
selectedPlayerName: formatMemberName(member), selectedPlayerName: formatMemberName(member),
rawEventLineup: eventLineupQuery.data?.eventLineup ?? null, rawEventLineup: eventLineupQuery.data?.eventLineup ?? null,
rawEventLineupEntries: eventLineupQuery.data?.entries ?? [], rawEventLineupEntries: eventLineupQuery.data?.entries ?? [],