import { useState, useEffect } from 'react'; import { FiStar } from 'react-icons/fi'; import { type Language, t } from '../translations'; import { useFavorites } from '../hooks/useFavorites'; import { Helmet } from 'react-helmet-async'; import { CircularProgress } from './CircularProgress'; import { useNavigate } from 'react-router-dom'; import { slugify } from '../utils/slugify'; import { AreaChart, Area, ResponsiveContainer, YAxis } from 'recharts'; import { FiTrendingUp, FiTrendingDown } from 'react-icons/fi'; interface Lake { id: string; name: string; river: string; priority: boolean; level: number; capacity: number; storageDiff?: number; inflow: number; outflow: number; volume: number; sparkline: number[]; } interface Props { language: Language; } const FavoritesOverview = ({ language }: Props) => { const [lakes, setLakes] = useState([]); const { isFavorite, toggleFavorite } = useFavorites(); const navigate = useNavigate(); useEffect(() => { fetch(`/data/lakes_index.json?t=${Date.now()}`) .then(res => res.json()) .then(data => setLakes(data)) .catch(err => console.error(err)); }, []); const favoriteLakes = lakes.filter(l => isFavorite(l.id)); return (
{t[language].seo.favoritesTitle}

{language === 'cs' ? 'Oblíbená' : 'Favourites'}

{language === 'cs' ? 'Jezera připnutá v přehledu. Připnout nebo odepnout lze ikonou hvězdičky.' : 'Lakes you pinned in the overview. Use the star icon to pin or unpin.'}

{favoriteLakes.length === 0 ? (

{language === 'cs' ? 'Zatím žádná oblíbená jezera.' : 'No favourites yet.'}

{language === 'cs' ? 'Přejdi na Jezera a nádrže a klikni na ⭐ u jezera, které tě zajímá.' : 'Go to Lakes & Reservoirs and click the ⭐ on any lake to pin it here.'}

) : (
{favoriteLakes.map(lake => { const chartData = lake.sparkline.map((val, i) => ({ name: i, value: val })); const minVal = Math.min(...lake.sparkline); const maxVal = Math.max(...lake.sparkline); const diff = maxVal - minVal; const padding = diff === 0 ? 0.1 : diff * 0.1; const yDomain = [minVal - padding, maxVal + padding]; const firstVal = lake.sparkline[0] || 0; const lastVal = lake.sparkline[lake.sparkline.length - 1] || 0; const trendDiff = lastVal - firstVal; let trendColor = 'var(--color-cyan)'; if (trendDiff > 0.01) trendColor = 'var(--color-green)'; else if (trendDiff < -0.01) trendColor = 'var(--color-red)'; return (
navigate(`/${slugify(lake.name)}`)} style={{ cursor: 'pointer', padding: '1.5rem', display: 'flex', flexDirection: 'column', gap: '1.5rem', position: 'relative' }} > {/* Unpin button */}

{lake.name} {lake.river ? `- ${lake.river}` : ''}

{t[language].kpi.level}
{lake.level} m n.m.
{lake.storageDiff !== undefined && (
= 0 ? 'var(--color-green)' : 'var(--color-red)', fontWeight: 'bold' }}> {lake.storageDiff > 0 ? '+' : ''}{lake.storageDiff.toFixed(2)} m
)}
{t[language].kpi.inflow} {lake.inflow} m³/s
{t[language].kpi.outflow} {lake.outflow} m³/s
); })}
)}
); }; export default FavoritesOverview;