diff --git a/src/app/api/export-report/route.js b/src/app/api/export-report/route.js
index cce2739..b4ae687 100644
--- a/src/app/api/export-report/route.js
+++ b/src/app/api/export-report/route.js
@@ -503,6 +503,12 @@ export async function GET(request) {
startDate.setHours(0, 0, 0, 0)
endDate = now
break
+ case 'yesterday':
+ startDate.setDate(now.getDate() - 1)
+ startDate.setHours(0, 0, 0, 0)
+ endDate = new Date(startDate)
+ endDate.setHours(23, 59, 59, 999)
+ break
case 'week':
startDate.setDate(now.getDate() - 7)
startDate.setHours(0, 0, 0, 0)
diff --git a/src/app/page.js b/src/app/page.js
index 847f8a9..599699e 100644
--- a/src/app/page.js
+++ b/src/app/page.js
@@ -13,27 +13,42 @@ 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 fetchData = async () => {
+ 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 data:', error)
+ console.error('Error fetching historical data:', error)
} finally {
setLoading(false)
}
}
useEffect(() => {
- fetchData()
- const interval = setInterval(fetchData, 20000)
- return () => clearInterval(interval)
+ fetchCurrentData()
+ const currentInterval = setInterval(fetchCurrentData, 20000)
+ return () => clearInterval(currentInterval)
}, [])
+ useEffect(() => {
+ fetchHistoricalData()
+ }, [timeRange])
+
if (loading) {
return (
@@ -52,8 +67,8 @@ export default function Dashboard() {
)
}
- const latestData = data[data.length - 1]?.data || {}
- const lastUpdateTime = data[data.length - 1]?.timestamp?.$date || data[data.length - 1]?.timestamp
+ 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 },
@@ -87,13 +102,13 @@ export default function Dashboard() {
className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-6"
>
-
+
-
+
diff --git a/src/components/Navbar.js b/src/components/Navbar.js
index 8df458f..7ff1811 100644
--- a/src/components/Navbar.js
+++ b/src/components/Navbar.js
@@ -4,7 +4,13 @@ import Image from 'next/image'
export function Navbar({ lastUpdateTime }) {
const handleExport = async (timeRange) => {
try {
+ console.log('Exporting report for:', timeRange)
const response = await fetch(`/api/export-report?timeRange=${timeRange}`)
+
+ if (!response.ok) {
+ throw new Error(`HTTP error! status: ${response.status}`)
+ }
+
const blob = await response.blob()
const url = window.URL.createObjectURL(blob)
const a = document.createElement('a')
@@ -16,6 +22,7 @@ export function Navbar({ lastUpdateTime }) {
document.body.removeChild(a)
} catch (error) {
console.error('Error exporting report:', error)
+ alert(`Failed to export report: ${error.message}`)
}
}
diff --git a/src/components/SolarChart.js b/src/components/SolarChart.js
index 0c9c361..39f67ce 100644
--- a/src/components/SolarChart.js
+++ b/src/components/SolarChart.js
@@ -8,33 +8,40 @@ export function SolarChart({ data, type, timeRange, onTimeRangeChange }) {
const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate())
const startOfYesterday = new Date(startOfDay)
startOfYesterday.setDate(startOfDay.getDate() - 1)
+ const endOfYesterday = new Date(startOfYesterday)
+ endOfYesterday.setHours(23, 59, 59, 999)
const startOfWeek = new Date(startOfDay)
startOfWeek.setDate(startOfDay.getDate() - 7)
const startOfMonth = new Date(startOfDay)
startOfMonth.setMonth(startOfDay.getMonth() - 1)
- let startTime
+ let startTime, endTime
switch (timeRange) {
case 'today':
startTime = startOfDay
+ endTime = now
break
case 'yesterday':
startTime = startOfYesterday
+ endTime = endOfYesterday
break
case 'week':
startTime = startOfWeek
+ endTime = now
break
case 'month':
startTime = startOfMonth
+ endTime = now
break
default:
startTime = startOfDay
+ endTime = now
}
return data.filter(item => {
const dateStr = item.timestamp.$date || item.timestamp
const date = new Date(dateStr)
- return date >= startTime && date <= now
+ return date >= startTime && date <= endTime
})
}