add opponent w/l for stream widget

This commit is contained in:
2025-04-28 01:22:56 +02:00
parent dd8b1028d6
commit c5a0cc89b6

View File

@@ -93,12 +93,31 @@ export function StreamCardClient() {
const isQueuing = playerState?.status === 'queuing' const isQueuing = playerState?.status === 'queuing'
const opponentId = playerState?.currentMatch?.opponentId const opponentId = playerState?.currentMatch?.opponentId
let winsVsOpponent = 0
let lossesVsOpponent = 0
if (opponentId) {
for (const game of games) {
if (game.opponentId === opponentId) {
if (game.result === 'win') {
winsVsOpponent++
} else if (game.result === 'loss') {
lossesVsOpponent++
}
}
}
}
console.log(winsVsOpponent, lossesVsOpponent)
return ( return (
<div <div
className={'flex items-center justify-between gap-2 font-m6x11'} className={'flex items-center justify-between gap-2 font-m6x11'}
style={{ zoom: '200%' }} style={{ zoom: '200%' }}
> >
<PlayerInfo playerData={playerData} isInBattle={!!opponentId}> <PlayerInfo
playerData={playerData}
isInBattle={!!opponentId}
wins={winsVsOpponent}
>
{isQueuing && playerState.queueStartTime && ( {isQueuing && playerState.queueStartTime && (
<QueueTimer startTime={playerState.queueStartTime} /> <QueueTimer startTime={playerState.queueStartTime} />
)} )}
@@ -108,7 +127,7 @@ export function StreamCardClient() {
<span> <span>
<Swords /> <Swords />
</span>{' '} </span>{' '}
<Opponent id={opponentId} /> <Opponent id={opponentId} wins={lossesVsOpponent} />
</> </>
)} )}
</div> </div>
@@ -149,7 +168,7 @@ function QueueTimer({ startTime }: { startTime: number }) {
) )
} }
function Opponent({ id }: { id: string }) { function Opponent({ id, wins }: { id: string; wins?: number }) {
const { data: gamesQueryResult } = api.history.user_games.useQuery({ const { data: gamesQueryResult } = api.history.user_games.useQuery({
user_id: id, user_id: id,
}) })
@@ -164,7 +183,7 @@ function Opponent({ id }: { id: string }) {
} }
const playerData = getPlayerData(rankedUserRank, games) const playerData = getPlayerData(rankedUserRank, games)
return <PlayerInfo playerData={playerData} isReverse isInBattle /> return <PlayerInfo playerData={playerData} isReverse isInBattle wins={wins} />
} }
function PlayerInfo({ function PlayerInfo({
@@ -173,11 +192,13 @@ function PlayerInfo({
children, children,
isReverse = false, isReverse = false,
isInBattle = false, isInBattle = false,
wins,
...rest ...rest
}: { }: {
playerData: ReturnType<typeof getPlayerData> playerData: ReturnType<typeof getPlayerData>
isReverse?: boolean isReverse?: boolean
isInBattle?: boolean isInBattle?: boolean
wins?: number
} & ComponentPropsWithoutRef<'div'>) { } & ComponentPropsWithoutRef<'div'>) {
return ( return (
<div <div
@@ -189,7 +210,7 @@ function PlayerInfo({
{...rest} {...rest}
> >
<div className='flex aspect-square h-full items-center justify-center gap-1 border-slate-700 border-r bg-gradient-to-r from-indigo-600 to-purple-600 px-2'> <div className='flex aspect-square h-full items-center justify-center gap-1 border-slate-700 border-r bg-gradient-to-r from-indigo-600 to-purple-600 px-2'>
<span className='font-bold text-sm'>{playerData.rank}</span> <span className='font-bold text-sm'>#{playerData.rank}</span>
</div> </div>
{/* Player Name */} {/* Player Name */}
@@ -229,7 +250,12 @@ function PlayerInfo({
)} )}
{/* Win/Loss */} {/* Win/Loss */}
<div className='flex items-center gap-0.5 border-slate-700 border-r px-2'> <div
className={cn(
'flex items-center gap-0.5 border-slate-700 px-2',
isReverse && 'border-r'
)}
>
<div className='flex items-center'> <div className='flex items-center'>
<div className='ml-0.5 font-bold text-emerald-400'> <div className='ml-0.5 font-bold text-emerald-400'>
{playerData.wins}W {playerData.wins}W
@@ -242,6 +268,16 @@ function PlayerInfo({
</div> </div>
</div> </div>
</div> </div>
{isInBattle && (
<div
className={cn(
'flex aspect-square h-full items-center justify-center gap-1 border-slate-700 bg-gradient-to-r px-2',
isReverse ? 'mr-4 border-r' : 'ml-4 border-l'
)}
>
<span className='font-bold text-sm'>{wins}</span>
</div>
)}
{/* Streak */} {/* Streak */}
{!isInBattle && ( {!isInBattle && (