diff --git a/src/App.tsx b/src/App.tsx index 22cf5e0..c6d2faf 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -19,13 +19,20 @@ export type Page = export default function App() { const [page, setPage] = useState("home"); + const [subPage, setSubPage] = useState("default"); + const [selectedProject, setSelectedProject] = useState(""); + + const navigateToMetersWithProject = (projectName: string) => { + setSelectedProject(projectName); + setPage("meters"); + }; const renderPage = () => { switch (page) { case "projects": return ; case "meters": - return ; + return ; case "concentrators": return ; case "users": @@ -34,7 +41,7 @@ export default function App() { return ; case "home": default: - return ; + return ; } }; @@ -42,7 +49,7 @@ export default function App() {
- +
{renderPage()}
diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 36fee34..fd5780c 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,4 +1,5 @@ import { Cpu, Settings, BarChart3, Bell } from "lucide-react"; +import { useEffect, useState } from "react"; import { BarChart, Bar, @@ -8,9 +9,42 @@ import { ResponsiveContainer, CartesianGrid, } from "recharts"; +import { fetchMeters, Meter } from "../api/meters"; import { Page } from "../App"; -export default function Home({ setPage }: { setPage: (page: Page) => void }) { +export default function Home({ + setPage, + navigateToMetersWithProject +}: { + setPage: (page: Page) => void; + navigateToMetersWithProject: (projectName: string) => void; +}) { + const [allProjects, setAllProjects] = useState([]); + const [meters, setMeters] = useState([]); + + + const loadMeters = async () => { + const data = await fetchMeters(); + setMeters(data); + const projectsArray = [...new Set(data.map((record: Meter) => record["areaName"]))]; + setAllProjects(projectsArray); + } + useEffect(() => { + loadMeters(); + }, []); + + const chartData = allProjects.map((projectName) => ({ + name: projectName, + meterCount: meters.filter((meter) => meter.areaName === projectName).length, + })); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const handleBarClick = (data: any) => { + if (data.activeLabel) { + navigateToMetersWithProject(data.activeLabel); + } + }; + // Datos de ejemplo para empresas const companies = [ { name: "Empresa A", tomas: 12, alerts: 2, consumption: 320 }, @@ -119,19 +153,24 @@ export default function Home({ setPage }: { setPage: (page: Page) => void }) { {/* Gráfica de consumo */}

- Consumo de Agua por Empresa + Número de Medidores por Proyecto

- +
diff --git a/src/pages/meters/MeterPage.tsx b/src/pages/meters/MeterPage.tsx index 1454bad..80c0e54 100644 --- a/src/pages/meters/MeterPage.tsx +++ b/src/pages/meters/MeterPage.tsx @@ -18,12 +18,12 @@ interface DeviceData { } /* ================= COMPONENT ================= */ -export default function MeterManagement() { +export default function MeterManagement({ selectedProject: initialProject }: { selectedProject?: string } = {}) { const [allProjects, setAllProjects] = useState([]); const [loadingProjects, setLoadingProjects] = useState(true); - const [selectedProject, setSelectedProject] = useState(""); + const [selectedProject, setSelectedProject] = useState(initialProject || ""); const [meters, setMeters] = useState([]); const [filteredMeters, setFilteredMeters] = useState([]); @@ -97,6 +97,12 @@ export default function MeterManagement() { loadMeters(); }, []); + useEffect(() => { + if (initialProject) { + setSelectedProject(initialProject); + } + }, [initialProject]); + const createOrUpdateDevice = async (deviceData: DeviceData): Promise => { //await fetch('/api/devices', { method: 'POST', body: JSON.stringify(deviceData) })