From 74b1b2e83820e1530a72e2705bf211a8143fdd05 Mon Sep 17 00:00:00 2001 From: Froidefond Julien Date: Wed, 25 Feb 2026 07:55:01 +0100 Subject: [PATCH] fix: restore WeatherAverageBar component in session header and adjust styling Reintroduced the WeatherAverageBar component in the WeatherSessionPage to display team averages. Updated the styling of the WeatherAverageBar for improved spacing. Enhanced the EvolutionIndicator component to use dynamic background colors for better visibility of status indicators. --- src/app/weather/[id]/page.tsx | 4 +- src/components/weather/WeatherAverageBar.tsx | 2 +- src/components/weather/WeatherCard.tsx | 39 ++++++++++++++++++-- src/services/weather.ts | 33 ++++++++++++----- 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/app/weather/[id]/page.tsx b/src/app/weather/[id]/page.tsx index a28f328..89c5bb0 100644 --- a/src/app/weather/[id]/page.tsx +++ b/src/app/weather/[id]/page.tsx @@ -72,9 +72,6 @@ export default async function WeatherSessionPage({ params }: WeatherSessionPageP - - {/* team average — auto-refreshes via router.refresh() from useLive */} - {/* Info sur les catégories */} @@ -90,6 +87,7 @@ export default async function WeatherSessionPage({ params }: WeatherSessionPageP canEdit={session.canEdit} userTeams={userTeams} > + +
Moyenne équipe diff --git a/src/components/weather/WeatherCard.tsx b/src/components/weather/WeatherCard.tsx index f17585e..ffa6b1e 100644 --- a/src/components/weather/WeatherCard.tsx +++ b/src/components/weather/WeatherCard.tsx @@ -48,12 +48,45 @@ function EvolutionIndicator({ if (direction === null) return null; if (direction === 'up') { - return ; + return ( + + ↑ + + ); } if (direction === 'down') { - return ; + return ( + + ↓ + + ); } - return ; + return ( + + → + + ); } export function WeatherCard({ sessionId, currentUserId, entry, canEdit, previousEntry }: WeatherCardProps) { diff --git a/src/services/weather.ts b/src/services/weather.ts index c379eaf..69b087f 100644 --- a/src/services/weather.ts +++ b/src/services/weather.ts @@ -203,17 +203,25 @@ export async function getPreviousWeatherEntriesForUsers( sessionId: { not: excludeSessionId }, session: { date: { lt: sessionDate } }, }, - orderBy: [{ userId: 'asc' }, { session: { date: 'desc' } }], select: { userId: true, performanceEmoji: true, moralEmoji: true, fluxEmoji: true, valueCreationEmoji: true, + session: { select: { date: true } }, }, }); - // Keep only the most recent entry per user (first occurrence since ordered by date desc) + // Sort by session.date desc (Prisma orderBy on relation is unreliable with SQLite) + entries.sort((a, b) => { + const dateA = a.session.date.getTime(); + const dateB = b.session.date.getTime(); + if (dateB !== dateA) return dateB - dateA; // most recent first + return a.userId.localeCompare(b.userId); + }); + + // For each user, use the most recent previous value PER AXIS (fallback if latest session has null) const map = new Map< string, { @@ -224,14 +232,19 @@ export async function getPreviousWeatherEntriesForUsers( } >(); for (const entry of entries) { - if (!map.has(entry.userId)) { - map.set(entry.userId, { - performanceEmoji: entry.performanceEmoji, - moralEmoji: entry.moralEmoji, - fluxEmoji: entry.fluxEmoji, - valueCreationEmoji: entry.valueCreationEmoji, - }); - } + const existing = map.get(entry.userId); + const base = existing ?? { + performanceEmoji: null as string | null, + moralEmoji: null as string | null, + fluxEmoji: null as string | null, + valueCreationEmoji: null as string | null, + }; + if (!existing) map.set(entry.userId, base); + if (base.performanceEmoji == null && entry.performanceEmoji != null) base.performanceEmoji = entry.performanceEmoji; + if (base.moralEmoji == null && entry.moralEmoji != null) base.moralEmoji = entry.moralEmoji; + if (base.fluxEmoji == null && entry.fluxEmoji != null) base.fluxEmoji = entry.fluxEmoji; + if (base.valueCreationEmoji == null && entry.valueCreationEmoji != null) + base.valueCreationEmoji = entry.valueCreationEmoji; } return map; }