diff --git a/src/dashboard.html b/src/dashboard.html index 9255969..b66f332 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -531,6 +531,10 @@ h2 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em;

Chemistry

Loading…
+
+

All Squads

+
Loading…
+
@@ -1138,15 +1142,23 @@ async function submitMatch() { }); const outcome = gf > ga ? 'Win' : gf === ga ? 'Draw' : 'Loss'; const outcomeColor = gf > ga ? '#3fb950' : gf === ga ? '#8b949e' : '#f85149'; + const levelUps = r.level_ups || []; + const levelUpHtml = levelUps.map(ev => + `
⬆ Level ${ev.new_level}! +${(ev.coins_granted||0).toLocaleString()} coins${ev.pack_granted ? ' + ' + ev.pack_granted : ''}
` + ).join(''); el('match-result-display').innerHTML = `
${outcome} ${gf}–${ga}
+${(r.coins_awarded || 0).toLocaleString()} coins · +${r.xp_awarded || 0} XP - ${(r.objectives_triggered || []).length ? `
Objectives: ${r.objectives_triggered.join(', ')}` : ''} - ${r.season ? `
Season pts: ${r.season.season_points}` : ''} + ${(r.objectives_updated || []).length ? `
Objectives: ${r.objectives_updated.join(', ')}` : ''} + ${r.season_end ? `
Season ended: Division ${r.season_end.new_division ?? '—'}` : ''}
+ ${levelUpHtml}
`; + if (levelUps.length) { + showToast(`Level Up! You are now level ${levelUps[levelUps.length - 1].new_level}`); + } api('GET', '/club').then(c => { el('hdr-coins').textContent = (c.coins ?? 0).toLocaleString() + ' coins'; }).catch(() => {}); await loadMatchHistory(); } catch (e) { showToast(e.message, true); } @@ -1480,12 +1492,15 @@ async function loadSettings() { api('GET', '/profile'), api('GET', '/settings'), ]); - const xpForNext = 1000; - const xpPct = Math.min(100, Math.round(((profile.xp || 0) % xpForNext) / xpForNext * 100)); + const xpForNext = profile.xp_for_next_level || 1000; + const xpEarned = xpForNext - (profile.xp_to_next_level || 0); + const xpPct = Math.min(100, Math.round((xpEarned / xpForNext) * 100)); el('profile-card').innerHTML = `
Username${profile.username || '—'}
Level${profile.level ?? 1}
-
XP${(profile.xp || 0).toLocaleString()}
+
XP${(profile.xp || 0).toLocaleString()} + ${(profile.xp_to_next_level || 0).toLocaleString()} to next level +
Profile ID: ${profile.id}
`; @@ -1563,6 +1578,35 @@ async function loadSquad() { el('squad-grid').innerHTML = `
${e.message}
`; el('squad-chemistry').innerHTML = ''; } + await loadSquadList(); +} + +async function loadSquadList() { + try { + const data = await api('GET', '/squads'); + const squads = data.squads || []; + if (!squads.length) { + el('squad-list').innerHTML = 'No squads saved yet.'; + return; + } + el('squad-list').innerHTML = squads.map(s => ` +
+ ${s.name} + ${s.formation} + +
`).join(''); + } catch (e) { el('squad-list').innerHTML = `
${e.message}
`; } +} + +async function deleteSquad(squadId, btn) { + if (!confirm('Delete this squad?')) return; + btn.disabled = true; + try { + await api('DELETE', `/squads/${squadId}`); + showToast('Squad deleted'); + loadSquad(); + } catch (e) { showToast(e.message, true); btn.disabled = false; } } // ── Squad Builder ────────────────────────────────────────────────────────────