import { Tabs } from 'expo-router'; import { Text, type ColorValue } from 'react-native'; import { useAssets, useReferenceValues } from '@/api/exploitation'; import { useMe } from '@/auth/session'; import { ongletsVisibles } from '@/auth/roles'; import { usePermissions } from '@/auth/use-permissions'; import { useFile } from '@/file/store'; import { useTokens } from '@/theme/tokens'; /** Barre d'onglets ADAPTATIVE (maquette « mobile ouvert à tous les rôles », * D1) : le Technicien/Technicien limité gardent exactement leurs 4 onglets * terrain R4, inchangés. Les autres rôles reçoivent Accueil/OT/Menu (ou une * variante plus étroite — Demandeur, Vue seule — selon leurs droits, * `ongletsVisibles`). Tous les écrans sont toujours déclarés : `href: null` * masque un onglet de la barre sans le retirer du navigateur (le Menu peut * toujours y pousser directement). */ function Pic({ glyphe, couleur }: { glyphe: string; couleur: ColorValue }) { return {glyphe}; } export default function CoquilleTabs() { const t = useTokens(); const file = useFile(); const conflits = file.some((s) => s.statut === 'CONFLIT'); const { data: me } = useMe(); const { can } = usePermissions(); const visibles = ongletsVisibles(me?.role.name); // D1 « lecture locale » : le parc (scan D4) et les référentiels du bilan // se préchargent dès l'entrée — le sous-sol n'attend pas qu'on y pense. // Le Demandeur n'a pas ASSETS.view (seulement /assets/options) : inutile // d'appeler /assets pour lui, l'API répondrait 403. const peutAssets = can('ASSETS', 'view'); useAssets({ enabled: peutAssets }); useReferenceValues({ enabled: peutAssets }); const cacher = (nom: string) => (visibles.has(nom) ? undefined : null); return ( , }} /> , }} /> , }} /> , tabBarBadge: file.length || undefined, tabBarBadgeStyle: { backgroundColor: conflits ? t.prioBloque : t.stAttente, color: '#fff', fontFamily: 'Manrope_800ExtraBold', fontSize: 10, }, }} /> , }} /> , }} /> , }} /> , }} /> ); }