import { router } from 'expo-router'; import { Pressable, Text, View } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useRequests, useWorkOrders } from '@/api/exploitation'; import { useMe } from '@/auth/session'; import { usePermissions } from '@/auth/use-permissions'; import { EnteteTabs } from '@/composants/ui'; import { PanneauDemandes } from '@/composants/panneau-demandes'; import { useTokens } from '@/theme/tokens'; /** Accueil — maquette « mobile ouvert à tous les rôles », écran 2 : le * Demandeur y voit directement ses demandes (son seul geste) ; les rôles * de gestion (Administrateur/Gestionnaire/Dispatcher/Vue seule) y trouvent * leurs signaux réels (urgence, OT en cours, demandes à traiter) — aucun * chiffre inventé : seuls WORK_ORDERS/REQUESTS sont déjà câblés sur mobile, * le reste (stock, préventif du mois…) attend son propre écran (Menu). */ export default function PageAccueil() { const { data: me } = useMe(); if (me?.role.name === 'Demandeur') { return ( ); } return ; } function TableauDeBordGestion() { const t = useTokens(); const { can } = usePermissions(); const peutOT = can('WORK_ORDERS', 'view'); const peutDemandes = can('REQUESTS', 'view'); const { data: workOrders } = useWorkOrders(); const { data: requests } = useRequests(); const ots = workOrders ?? []; const urgences = ots.filter((o) => o.priority === 'PERSON_TRAPPED' && o.status !== 'DONE' && o.status !== 'CANCELLED'); const enCours = ots.filter((o) => o.status === 'OPEN' || o.status === 'IN_PROGRESS').length; const aTraiter = (requests ?? []).filter((r) => r.status === 'RECEIVED').length; return ( Accueil {urgences.length ? ( router.push(`/ot/${urgences[0]!.id}`)} style={{ backgroundColor: t.prioBloqueFond, borderRadius: 10, padding: 9, flexDirection: 'row', alignItems: 'center', gap: 8, }} > {urgences.length === 1 ? `1 personne bloquée — ${urgences[0]!.assetReference} · ${urgences[0]!.siteName}` : `${urgences.length} personnes bloquées`} ) : null} {peutOT || peutDemandes ? ( {peutOT ? ( {enCours} OT en cours ) : null} {peutDemandes ? ( {aTraiter} Demandes reçues ) : null} ) : null} {peutDemandes && aTraiter > 0 ? ( router.push('/demandes')} style={{ flexDirection: 'row', alignItems: 'center', gap: 10, backgroundColor: t.surface, borderColor: t.bordure, borderWidth: 1, borderRadius: 10, padding: 11, }} > Demandes en attente à approuver ou rejeter {aTraiter} ) : null} {!peutOT && !peutDemandes ? ( Rien à afficher ici pour votre rôle — voir le Menu. ) : null} ); }