import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { ASSET_STATUS_LABELS, ASSET_STATUSES, type AssetStatus } from '@siop/shared'; import { useAssets } from '@/api/referentiel'; import { usePermissions } from '@/auth/use-permissions'; import { StatutEquipement } from '@/components/statut-equipement'; import { Button } from '@/components/ui/button'; /** Écran 3 des maquettes R1 : inventaire dense du parc. */ export default function PageAscenseurs() { const navigate = useNavigate(); const { data: assets } = useAssets(); const { can } = usePermissions(); const [site, setSite] = useState(''); const [statut, setStatut] = useState<'' | AssetStatus>(''); const tous = assets ?? []; const sites = [...new Set(tous.map((a) => a.siteName))].sort(); const visibles = tous.filter( (a) => (!site || a.siteName === site) && (!statut || a.status === statut), ); const arret = tous.filter((a) => a.status === 'OUT_OF_SERVICE').length; return ( <>

Ascenseurs

{tous.length} appareils{arret ? ` · ${arret} à l’arrêt` : ''}
{can('ASSETS', 'create') ? ( ) : null}
{visibles.map((a) => ( navigate(`/ascenseurs/${a.id}`)} style={{ cursor: 'pointer' }} > ))}
Appareil Marque · modèle Site / emplacement Catégorie Statut Organes
{a.reference} {a.brand} {a.model ?? ''} {a.siteName} {a.locationName !== a.siteName ? ( {a.locationName} ) : null} {a.categoryName} {a.componentCount}
); }