import { trpc } from "@/lib/trpc"; import { useAuth } from "@/_core/hooks/useAuth"; import SonumLayout from "@/components/SonumLayout"; import { ChevronDown, ChevronRight, Building2, Package, Search, Filter } from "lucide-react"; import { useState, useMemo } from "react"; import { EtatBadge } from "@/components/EtatBadge"; export default function MesSolutions() { const { isAuthenticated } = useAuth(); const [openIds, setOpenIds] = useState>(new Set()); const [search, setSearch] = useState(""); const [filterBloc, setFilterBloc] = useState(""); const { data: solutions, isLoading } = trpc.logiciels.mesSolutions.useQuery(undefined, { enabled: isAuthenticated, }); const { data: blocs } = trpc.referentiel.blocsFonctionnels.useQuery(); const toggle = (id: number) => { setOpenIds((prev) => { const next = new Set(prev); if (next.has(id)) next.delete(id); else next.add(id); return next; }); }; const filtered = useMemo(() => { if (!solutions) return []; return solutions.filter((s) => { const matchSearch = !search || s.solutionNom.toLowerCase().includes(search.toLowerCase()) || s.editeurNom.toLowerCase().includes(search.toLowerCase()); const matchBloc = !filterBloc || s.blocFonctionnelNom === filterBloc; return matchSearch && matchBloc; }); }, [solutions, search, filterBloc]); const blocsUniques = useMemo(() => { if (!solutions) return []; const set = new Set(solutions.map((s) => s.blocFonctionnelNom).filter(Boolean) as string[]); return Array.from(set); }, [solutions]); return (
{/* En-tête */}

Mes Solutions Numériques

{solutions ? `${solutions.length} solution${solutions.length > 1 ? "s" : ""} référencée${solutions.length > 1 ? "s" : ""}` : "Chargement…"}

{/* Filtres */}
setSearch(e.target.value)} className="w-full pl-9 pr-4 py-2.5 text-sm bg-background border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary" />
{/* Liste */} {isLoading ? (
{[...Array(4)].map((_, i) => (
))}
) : filtered.length === 0 ? (

Aucune solution trouvée

Rattachez des solutions à vos établissements pour les voir apparaître ici.

) : (
{filtered.map((sol) => { const isOpen = openIds.has(sol.solutionId); return (
{/* En-tête accordéon */} {/* Contenu accordéon */} {isOpen && (
Établissements équipés
{sol.etablissements.map((etab) => (
{etab.nom} {etab.region && ( — {etab.region} )}
))}
)}
); })}
)}
); }