// src/pages/concentrators/ConcentratorsSidebar.tsx import { useMemo } from "react"; import { ChevronDown, Check, RefreshCcw } from "lucide-react"; import type { ProjectCard, SampleView } from "./ConcentratorsPage"; type Props = { loadingProjects: boolean; sampleView: SampleView; sampleViewLabel: string; // ✅ ahora lo controla el Page typesMenuOpen: boolean; setTypesMenuOpen: React.Dispatch>; onChangeSampleView: (next: SampleView) => void; selectedProject: string; onSelectProject: (name: string) => void; // ✅ el Page manda projects={c.projectsData} projects: ProjectCard[]; onRefresh: () => void; refreshDisabled: boolean; }; export default function ConcentratorsSidebar({ loadingProjects, sampleView, sampleViewLabel, typesMenuOpen, setTypesMenuOpen, onChangeSampleView, selectedProject, onSelectProject, projects, onRefresh, refreshDisabled, }: Props) { const options = useMemo( () => [ { key: "GENERAL", label: "General" }, { key: "LORA", label: "LoRa" }, { key: "LORAWAN", label: "LoRaWAN" }, { key: "GRANDES", label: "Grandes consumidores" }, ] as Array<{ key: SampleView; label: string }>, [] ); return (
{/* Header */}

Proyectos

Tipo: {sampleViewLabel} {" • "} Seleccionado:{" "} {selectedProject || "—"}

{/* Tipos de tomas (dropdown) */}
{typesMenuOpen && (
{options.map((opt) => { const active = sampleView === opt.key; return ( ); })}
)}
{/* List */}
{loadingProjects && sampleView === "GENERAL" ? (
Loading projects...
) : projects.length === 0 ? (
No projects available. Please contact your administrator.
) : ( projects.map((p) => { const active = p.name === selectedProject; return (
onSelectProject(p.name)} className={[ "rounded-xl border p-4 transition cursor-pointer", active ? "border-blue-600 bg-blue-50/40" : "border-gray-200 bg-white hover:bg-gray-50", ].join(" ")} >

{p.name}

{p.region}

{p.status}
Subproyectos {p.projects}
Concentradores {p.concentrators}
Alertas activas {p.activeAlerts}
Última sync {p.lastSync}
Responsable {p.contact}
); }) )}
Nota: region/alertas/última sync están en modo demostración hasta integrar backend.
); }