'use client' import { useState, useEffect } from 'react' import { Card } from '@/components/ui/card' import { BatteryStatus } from '@/components/BatteryStatus' import { PowerStats } from '@/components/PowerStats' import { SystemStatus } from '@/components/SystemStatus' import { SolarChart } from '@/components/SolarChart' import { LastRefresh } from '@/components/LastRefresh' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { motion, AnimatePresence } from 'framer-motion' import { Navbar } from '@/components/Navbar' export default function Dashboard() { const [data, setData] = useState([]) const [currentData, setCurrentData] = useState([]) const [timeRange, setTimeRange] = useState('today') const [loading, setLoading] = useState(true) const [minLoadingComplete, setMinLoadingComplete] = useState(false) const fetchCurrentData = async () => { try { const response = await fetch('/api/solar-data?timeRange=today') const newData = await response.json() setCurrentData(newData) } catch (error) { console.error('Error fetching current data:', error) } } const fetchHistoricalData = async () => { try { const response = await fetch(`/api/solar-data?timeRange=${timeRange}`) const newData = await response.json() setData(newData) } catch (error) { console.error('Error fetching historical data:', error) } finally { setLoading(false) } } useEffect(() => { // Set minimum loading time const minLoadingTimer = setTimeout(() => { setMinLoadingComplete(true) }, 500) fetchCurrentData() const currentInterval = setInterval(fetchCurrentData, 20000) return () => { clearInterval(currentInterval) clearTimeout(minLoadingTimer) } }, []) useEffect(() => { fetchHistoricalData() }, [timeRange]) if (loading || !minLoadingComplete) { return (
) } const latestData = currentData[currentData.length - 1]?.data || {} const lastUpdateTime = currentData[currentData.length - 1]?.timestamp?.$date || currentData[currentData.length - 1]?.timestamp const containerVariants = { hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.1 } } } const itemVariants = { hidden: { y: 20, opacity: 0 }, visible: { y: 0, opacity: 1, transition: { duration: 0.5 } } } return (
) }