diff --git a/src/routes/(app)/matches/[id]/+page.svelte b/src/routes/(app)/matches/[id]/+page.svelte index 4c08a34..71deef4 100644 --- a/src/routes/(app)/matches/[id]/+page.svelte +++ b/src/routes/(app)/matches/[id]/+page.svelte @@ -59,13 +59,13 @@ // Group mappool slots by category const groupedSlots = $derived(() => { if (!m.mappool?.slots) return {}; - const groups: Record = {}; + const groups: Record = {}; for (const slot of m.mappool.slots) { if (!groups[slot.category]) groups[slot.category] = []; groups[slot.category].push(slot); } for (const cat of Object.keys(groups)) { - groups[cat].sort((a: any, b: any) => a.orderInCategory - b.orderInCategory); + groups[cat].sort((a: unknown, b: unknown) => a.orderInCategory - b.orderInCategory); } // Return entries sorted by canonical mod order return Object.fromEntries( @@ -99,7 +99,7 @@ const mappoolAvgSR = $derived(() => { const slots = m.mappool?.slots; if (!slots?.length) return null; - const avg = slots.reduce((sum: number, s: any) => sum + (s.starRating ?? 0), 0) / slots.length; + const avg = slots.reduce((sum: number, s: unknown) => sum + (s.starRating ?? 0), 0) / slots.length; return avg.toFixed(2); }); @@ -412,64 +412,76 @@ {#if !mappoolCollapsed}
- {#each Object.entries(groupedSlots()) as [category, slots]} + {#each Object.entries(groupedSlots()) as [category, slots] (category)} +
{category}
- {#each slots as slot} + {#each slots as slot (slot.id)} + {@const bm = data.beatmapCache[slot.beatmapId]} {@const isPlayed = playedSlotIds.has(slot.id)} {@const isTB = slot.category === 'TB'} {@const tbLocked = isTB && !isTiebreakerAllowed} {@const cantPick = !isMyTurnToPick || !pickingPhase} -
{ - picking = true; - pickError = ''; - return async ({ result, update }) => { - picking = false; - if (result.type === 'failure' || (result.type === 'success' && (result.data as any)?.error)) { - pickError = (result.data as any)?.error ?? 'Pick failed'; - } else { - await update(); - } - }; - }}> - - - +
+ {category}{slot.orderInCategory} + {#if isPlayed} + ✓ + {:else if tbLocked} + 🔒 + {:else if pickingPhase} +
{ + picking = true; + pickError = ''; + return async ({ result, update }) => { + picking = false; + if (result.type === 'failure' || (result.type === 'success' && (result.data as Record)?.error)) { + pickError = (result.data as Record)?.error as string ?? 'Pick failed'; + } else { + await update(); + } + }; + }}> + + + + {/if} +
{/each}