'use client'; import { useState, useTransition } from 'react'; import { createOrUpdateWeatherEntry } from '@/actions/weather'; import { Avatar } from '@/components/ui/Avatar'; import { Textarea } from '@/components/ui/Textarea'; const WEATHER_EMOJIS = [ { emoji: '', label: 'Aucun' }, { emoji: '☀️', label: 'Soleil' }, { emoji: '🌤️', label: 'Soleil derrière nuage' }, { emoji: '⛅', label: 'Soleil et nuages' }, { emoji: '☁️', label: 'Nuages' }, { emoji: '🌦️', label: 'Soleil et pluie' }, { emoji: '🌧️', label: 'Pluie' }, { emoji: '⛈️', label: 'Orage et pluie' }, { emoji: '🌩️', label: 'Éclair' }, { emoji: '❄️', label: 'Neige' }, { emoji: '🌨️', label: 'Neige qui tombe' }, { emoji: '🌪️', label: 'Tornade' }, { emoji: '🌫️', label: 'Brouillard' }, { emoji: '🌈', label: 'Arc-en-ciel' }, { emoji: '🌊', label: 'Vague' }, { emoji: '🔥', label: 'Feu' }, { emoji: '💨', label: 'Vent' }, { emoji: '⭐', label: 'Étoile' }, { emoji: '🌟', label: 'Étoile brillante' }, { emoji: '✨', label: 'Étincelles' }, ]; interface WeatherEntry { id: string; userId: string; performanceEmoji: string | null; moralEmoji: string | null; fluxEmoji: string | null; valueCreationEmoji: string | null; notes: string | null; user: { id: string; name: string | null; email: string; }; } interface WeatherCardProps { sessionId: string; currentUserId: string; entry: WeatherEntry; canEdit: boolean; } export function WeatherCard({ sessionId, currentUserId, entry, canEdit }: WeatherCardProps) { const [isPending, startTransition] = useTransition(); const [notes, setNotes] = useState(entry.notes || ''); const [performanceEmoji, setPerformanceEmoji] = useState(entry.performanceEmoji || null); const [moralEmoji, setMoralEmoji] = useState(entry.moralEmoji || null); const [fluxEmoji, setFluxEmoji] = useState(entry.fluxEmoji || null); const [valueCreationEmoji, setValueCreationEmoji] = useState(entry.valueCreationEmoji || null); const isCurrentUser = entry.userId === currentUserId; const canEditThis = canEdit && isCurrentUser; function handleEmojiChange(axis: 'performance' | 'moral' | 'flux' | 'valueCreation', emoji: string | null) { if (!canEditThis) return; // Calculate new values const newPerformanceEmoji = axis === 'performance' ? emoji : performanceEmoji; const newMoralEmoji = axis === 'moral' ? emoji : moralEmoji; const newFluxEmoji = axis === 'flux' ? emoji : fluxEmoji; const newValueCreationEmoji = axis === 'valueCreation' ? emoji : valueCreationEmoji; // Update local state immediately if (axis === 'performance') { setPerformanceEmoji(emoji); } else if (axis === 'moral') { setMoralEmoji(emoji); } else if (axis === 'flux') { setFluxEmoji(emoji); } else if (axis === 'valueCreation') { setValueCreationEmoji(emoji); } // Save to server with new values startTransition(async () => { await createOrUpdateWeatherEntry(sessionId, { performanceEmoji: newPerformanceEmoji, moralEmoji: newMoralEmoji, fluxEmoji: newFluxEmoji, valueCreationEmoji: newValueCreationEmoji, notes, }); }); } function handleNotesChange(newNotes: string) { if (!canEditThis) return; setNotes(newNotes); } function handleNotesBlur() { if (!canEditThis) return; startTransition(async () => { await createOrUpdateWeatherEntry(sessionId, { performanceEmoji, moralEmoji, fluxEmoji, valueCreationEmoji, notes, }); }); } // For current user without entry, we need to get user info from somewhere // For now, we'll use a placeholder - in real app, you'd pass user info as prop const user = entry.user; return (