Adds display of Team members

This commit is contained in:
2026-05-18 17:12:43 -05:00
parent 6e4edd96ce
commit 86866f4db7
4 changed files with 84 additions and 8 deletions

View File

@@ -6,10 +6,11 @@
apiGetHunterTeam,
apiGetOngoingHunts,
apiGetUnstartedHunts,
apiGetTeamHunters,
apiJoinTeam,
apiListTeams,
} from '../../lib/api/index'
import type {HuntResponse, TeamResponse} from '../../lib/api/types'
import type {HuntResponse, HunterSummaryResponse, TeamResponse} from '../../lib/api/types'
import StatusBadge from '../../lib/components/StatusBadge.svelte'
import LoadingSpinner from '../../lib/components/LoadingSpinner.svelte'
@@ -53,6 +54,7 @@
let sheetHunt = $state<HuntResponse | null>(null)
let sheetTeams = $state<TeamResponse[]>([])
let sheetMembers = $state<HunterSummaryResponse[]>([])
let sheetLoading = $state(false)
let newTeamName = $state('')
let creatingTeam = $state(false)
@@ -63,9 +65,20 @@
sheetHunt = hunt
sheetError = ''
newTeamName = ''
sheetMembers = []
sheetLoading = true
try {
sheetTeams = await apiListTeams(hunt.id)
const myTeam = upcomingTeams[hunt.id]
if (myTeam) {
const [teams, members] = await Promise.all([
apiListTeams(hunt.id),
apiGetTeamHunters(hunt.id, myTeam.id),
])
sheetTeams = teams
sheetMembers = members
} else {
sheetTeams = await apiListTeams(hunt.id)
}
} catch (e: unknown) {
sheetError = e instanceof Error ? e.message : 'Failed to load teams'
} finally {
@@ -237,10 +250,21 @@
<LoadingSpinner />
{:else if myTeam}
<!-- Already on a team -->
<div class="rounded-xl border border-base-200 p-4">
<p class="text-xs font-semibold uppercase tracking-wide text-base-content/40 mb-1">Your Team</p>
<p class="text-lg font-bold">{myTeam.name}</p>
<!-- Team member list will be available once the backend exposes a members endpoint -->
<div class="rounded-xl border border-base-200 p-4 flex flex-col gap-3">
<div>
<p class="text-xs font-semibold uppercase tracking-wide text-base-content/40 mb-1">Your Team</p>
<p class="text-lg font-bold">{myTeam.name}</p>
</div>
{#if sheetMembers.length > 0}
<div>
<p class="text-xs font-semibold uppercase tracking-wide text-base-content/40 mb-2">Members</p>
<div class="flex flex-col gap-1">
{#each sheetMembers as member}
<p class="text-sm font-medium">{member.name}</p>
{/each}
</div>
</div>
{/if}
</div>
{:else}
<!-- Join or create -->