From 8bff21bedec22d8cf253e9c9e3d742e6b8aae3c7 Mon Sep 17 00:00:00 2001 From: Froidefond Julien Date: Wed, 4 Mar 2026 08:34:23 +0100 Subject: [PATCH] feat(weather): show trend indicators on team averages --- src/app/weather/[id]/page.tsx | 12 ++- src/components/weather/WeatherAverageBar.tsx | 89 ++++++++++++++++++-- 2 files changed, 93 insertions(+), 8 deletions(-) diff --git a/src/app/weather/[id]/page.tsx b/src/app/weather/[id]/page.tsx index 224ab2f..cac4e4e 100644 --- a/src/app/weather/[id]/page.tsx +++ b/src/app/weather/[id]/page.tsx @@ -40,6 +40,16 @@ export default async function WeatherSessionPage({ params }: WeatherSessionPageP getUserTeams(authSession.user.id), getWeatherSessionsHistory(authSession.user.id), ]); + const currentHistoryIndex = history.findIndex((point) => point.sessionId === session.id); + const previousTeamAverages = + currentHistoryIndex > 0 + ? { + performance: history[currentHistoryIndex - 1].performance, + moral: history[currentHistoryIndex - 1].moral, + flux: history[currentHistoryIndex - 1].flux, + valueCreation: history[currentHistoryIndex - 1].valueCreation, + } + : null; return (
@@ -70,7 +80,7 @@ export default async function WeatherSessionPage({ params }: WeatherSessionPageP canEdit={session.canEdit} userTeams={userTeams} > - + score !== null); + if (scores.length === 0) return null; + return scores.reduce((sum, score) => sum + score, 0) / scores.length; +} + +function AverageEvolutionIndicator({ + currentScore, + previousScore, +}: { + currentScore: number | null; + previousScore: number | null | undefined; +}) { + if (currentScore === null || previousScore === null || previousScore === undefined) return null; + const delta = currentScore - previousScore; + + if (delta < 0) { + return ( + + ↑ + + ); + } + + if (delta > 0) { + return ( + + ↓ + + ); + } + + return ( + + → + + ); +} + +export function WeatherAverageBar({ entries, previousAverages }: WeatherAverageBarProps) { if (entries.length === 0) return null; return (
Moyenne équipe - {AXES.map(({ key, label }) => { + {AXES.map(({ key, scoreKey, label }) => { + const currentScore = getAverageScore(entries.map((e) => e[key])); const avg = getAverageEmoji(entries.map((e) => e[key])); return (
{avg ?? '—'} {label} +
); })}