@@ -6,9 +6,9 @@ import { Image } from "astro:assets"
6
6
import infernals from " ../../assets/game/factions/infernals-small.png"
7
7
import vanguard from " ../../assets/game/factions/vanguard-small.png"
8
8
import MatchPreview from " ../../components/widgets/MatchPreview.astro"
9
- import { PlayersApi } from " ../../lib/api"
10
- import { leagues } from " ../../assets/game/leagues/leagues"
9
+ import { PlayersApi , type PlayerActivityStats } from " ../../lib/api"
11
10
import { RankedBadge } from " ../../components/ui/RankedBadge"
11
+ import PlayerActivity from " ../../components/widgets/PlayerActivity.astro"
12
12
const themes = {
13
13
infernals: {
14
14
badge: " bg-red-800/20 border-red-500/50" ,
@@ -33,55 +33,68 @@ const highestLeague = player.leaderboard_entries.reduce(
33
33
(acc , entry ) => (entry .points > acc .points ? entry : acc ),
34
34
player .leaderboard_entries [0 ]
35
35
)
36
+
37
+ const playerActivity = (await PlayersApi .getPlayerStatisticsActivity ({ playerId })) as any as PlayerActivityStats
36
38
---
37
39
38
40
<Layout title ={ player .nickname } >
39
41
<div class =" w-full border-b border-gray-700/50 bg-gray-800/50 backdrop-blur-lg" >
40
- <div class =" mx-auto flex max-w-screen-md flex-wrap items-center gap-4 px-4 py-4" >
42
+ <div class =" mx-auto flex max-w-screen-lg flex-wrap items-center gap-4 px-4 py-4" >
41
43
<RankedBadge entry ={ highestLeague } class =" w-20" client:load />
42
44
<h1 class =" flex-auto text-2xl font-bold text-gray-50" >{ player .nickname } </h1 >
45
+ </div >
46
+ </div >
47
+ <section class =" relative mx-auto flex max-w-screen-lg flex-col gap-6 px-4 py-8 md:px-7 lg:flex-row" >
48
+ <div class =" flex-auto" >
49
+ <Widget title =" Recent Matches" label =" Closed Beta Ranked" >
50
+ <div class =" " >
51
+ { playerMatches .matches .map ((match ) => <MatchPreview match = { match } mainPlayerId = { playerId } />)}
52
+ </div >
53
+ </Widget >
54
+ </div >
55
+ <div class =" order-first flex basis-1/4 flex-col gap-6 sm:flex-row lg:order-none lg:flex-col" >
56
+ <Widget title =" Top Ranks" >
57
+ <div class =" flex flex-col gap-2" >
58
+ {
59
+ player .leaderboard_entries .map ((entry ) => (
60
+ <div
61
+ class :list = { [
62
+ " rounded-lg pl-3 pr-1 py-2 -mx-2 flex items-center gap-3 text-sm sm:text-base" ,
63
+ themes [entry .race as Theme ].badge ,
64
+ ]}
65
+ >
66
+ <Image
67
+ src = { entry .race === " infernals" ? infernals : vanguard }
68
+ alt = { entry .race }
69
+ class = " size-6 sm:size-10"
70
+ />
71
+ <div >
72
+ <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >Rank</span >
73
+ <p >#{ entry .rank } </p >
74
+ </div >
75
+ <div >
76
+ <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >Points</span >
77
+ <p >
78
+ { Math .round (entry .points )}
43
79
44
- <div class =" flex flex-wrap gap-4" >
45
- {
46
- player .leaderboard_entries .map ((entry ) => (
47
- <div
48
- class :list = { [
49
- " border rounded-lg px-4 py-2 flex items-center gap-3 text-sm sm:text-base" ,
50
- themes [entry .race as Theme ].badge ,
51
- ]}
52
- >
53
- <Image
54
- src = { entry .race === " infernals" ? infernals : vanguard }
55
- alt = { entry .race }
56
- class = " size-6 sm:size-10"
57
- />
58
- <div >
59
- <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >Rank</span >
60
- <p >#{ entry .rank } </p >
61
- </div >
62
- <div >
63
- <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >Points</span >
64
- <p >
65
- { Math .round (entry .points )}
66
-
67
- <RankedBadge entry = { entry } class = " inline-block w-4" client :load />
68
- </p >
69
- </div >
70
- <div >
71
- <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >MMR</span >
72
- <p >{ Math .round (entry .mmr )} </p >
80
+ <RankedBadge entry = { entry } class = " inline-block w-4" client :load />
81
+ </p >
82
+ </div >
83
+ <div >
84
+ <span class :list = { [" text-xs" , themes [entry .race as Theme ].badgeLabel ]} >MMR</span >
85
+ <p >{ Math .round (entry .mmr )} </p >
86
+ </div >
73
87
</div >
74
- </div >
75
- ))
76
- }
88
+ ))
89
+ }
90
+ </div >
91
+ </Widget >
92
+ <div class =" hidden sm:block" >
93
+ <PlayerActivity activity ={ playerActivity } {player } />
77
94
</div >
78
95
</div >
79
- </div >
80
- <section class =" relative mx-auto max-w-screen-md px-4 py-8" >
81
- <Widget title =" Recent Matches" label =" Closed Beta Ranked" >
82
- <div class =" -mx-3 sm:-mx-4" >
83
- { playerMatches .matches .map ((match ) => <MatchPreview match = { match } mainPlayerId = { playerId } />)}
84
- </div >
85
- </Widget >
96
+ <div class =" sm:hidden" >
97
+ <PlayerActivity activity ={ playerActivity } {player } />
98
+ </div >
86
99
</section >
87
100
</Layout >
0 commit comments