// app/buildings/[buildingid]/emissions/page.tsx "use client"; import { useState, useEffect } from "react"; import { CalendarDate } from "@internationalized/date"; import { Button } from "@nextui-org/button"; import { Divider } from "@nextui-org/divider"; import { ButtonGroup } from "@nextui-org/button"; import { Card, CardHeader, CardBody } from "@nextui-org/react"; import { Input } from "@nextui-org/input"; import { Popover, PopoverTrigger, PopoverContent } from "@nextui-org/popover"; import { Calendar, DateValue } from "@nextui-org/calendar"; import AddDataButton from "@/components/addDataButton"; import { useBuilding } from "@/lib/useBuildingData"; import EmissionsGraph from "@/components/emissionsGraph"; interface EmissionsPageProps { params: { buildingid: string }; } export default function EmissionsPage({ params }: EmissionsPageProps) { const { data: buildingData } = useBuilding(params.buildingid); // State for filters const [startDate, setStartDate] = useState(null); const [endDate, setEndDate] = useState(null); const [showWaste, setShowWaste] = useState(true); const [showElectricity, setShowElectricity] = useState(true); const [showGas, setShowGas] = useState(true); const [graphType, setGraphType] = useState<'line' | 'area' | 'pie'>('line'); useEffect(() => { if (buildingData) { const allDates = [ ...buildingData.electricityUsage.map(d => d.timestamp), ...buildingData.naturalGasUsage.map(d => d.timestamp), ...buildingData.wasteGeneration.map(d => d.timestamp) ]; if (allDates.length > 0) { const earliestDate = new Date(Math.min(...allDates.map(d => (d as any).seconds * 1000))); const latestDate = new Date(Math.max(...allDates.map(d => (d as any).seconds * 1000))); earliestDate.setDate(earliestDate.getDate() - 1); latestDate.setDate(latestDate.getDate() + 1); setStartDate(new CalendarDate(earliestDate.getFullYear(), earliestDate.getMonth() + 1, earliestDate.getDate())); setEndDate(new CalendarDate(latestDate.getFullYear(), latestDate.getMonth() + 1, latestDate.getDate())); } } }, [buildingData]); const handlePdfToImage = async () => { try { const formData = new FormData(); const pdfResponse = await fetch('/electricity-sample-bill.pdf'); const pdfBlob = await pdfResponse.blob(); formData.append('pdf', pdfBlob, 'electricity-sample-bill.pdf'); const response = await fetch('/api/pdf-to-image', { method: 'POST', body: { ...formData, type: 'electricity' } }); if (!response.ok) { throw new Error('Failed to convert PDF to image'); } const result = await response.json(); console.log('PDF to Image conversion result:', result); // Handle the result as needed } catch (error) { console.error('Error converting PDF to image:', error); // Handle the error (e.g., show an error message to the user) } }; const handleStartDateChange = (date: DateValue) => { setStartDate(date); }; const handleEndDateChange = (date: DateValue) => { setEndDate(date); }; return (
{/* Tab Title */}

{`Emissions`}

{/* Group for filters plus graph */}
{/* Horizontal group for adding data and filters */}
{/* Data Type Selection Card */}

Data Types

{/* Chart Type Selection Card */}

Chart Type

{/* Date Range Selection Card */}

Date Range

{/* Render emissions graph */}
); }