mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
apps/mobile (Expo SDK 57, TS strict, workspace pnpm) : connexion e-mail/mdp + sélecteur démo ADR-002 (uniquement si l'API l'expose), tabbar de la maquette validée (onglets futurs marqués R4.2/R4.3), « Ma journée » triée priorité puis échéance (fonction pure testée), urgence en tête, pastille de synchro. D1 en actes (lecture) : cache TanStack persisté dans AsyncStorage (7 jours), NetInfo → onlineManager + bandeau hors-ligne horodaté ; jeton en SecureStore ; tokens light/dark répliqués et testés ; client typé régénéré depuis docs/openapi.json (règle d'or). API : CORS_ORIGINS opt-in (vide par défaut) — Expo web/debug seulement, le web de prod reste derrière le proxy, les apps natives n'ont pas d'Origin. Vérifié 10/10 en Expo web piloté (connexion démo Ahmed → Ma journée scopée → hors-ligne servie du cache → retour) ; 6 tests jest-expo ; lint racine étendu (react-hooks) ; job CI mobile, deploy en dépend. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { Tabs } from 'expo-router';
|
|
import { Text, type ColorValue } from 'react-native';
|
|
import { useTokens } from '@/theme/tokens';
|
|
|
|
/** La tabbar de la maquette R4. Les onglets à venir restent visibles
|
|
* (périmètre annoncé, même patron que la sidebar web) mais mènent à un
|
|
* écran « disponible en R4.x ». */
|
|
|
|
function Pic({ glyphe, couleur }: { glyphe: string; couleur: ColorValue }) {
|
|
return <Text style={{ fontSize: 17, color: couleur, lineHeight: 20 }}>{glyphe}</Text>;
|
|
}
|
|
|
|
export default function CoquilleTabs() {
|
|
const t = useTokens();
|
|
return (
|
|
<Tabs
|
|
screenOptions={{
|
|
headerShown: false,
|
|
tabBarActiveTintColor: t.primaire,
|
|
tabBarInactiveTintColor: t.encre3,
|
|
tabBarStyle: { backgroundColor: t.surface, borderTopColor: t.bordure },
|
|
tabBarLabelStyle: { fontFamily: 'Manrope_700Bold', fontSize: 10 },
|
|
sceneStyle: { backgroundColor: t.fond },
|
|
}}
|
|
>
|
|
<Tabs.Screen
|
|
name="journee"
|
|
options={{
|
|
title: 'Ma journée',
|
|
tabBarIcon: ({ color }) => <Pic glyphe="☰" couleur={color} />,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="scanner"
|
|
options={{
|
|
title: 'Scanner',
|
|
tabBarIcon: ({ color }) => <Pic glyphe="▣" couleur={color} />,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="preventif"
|
|
options={{
|
|
title: 'Préventif',
|
|
tabBarIcon: ({ color }) => <Pic glyphe="✓" couleur={color} />,
|
|
}}
|
|
/>
|
|
<Tabs.Screen
|
|
name="synchro"
|
|
options={{
|
|
title: 'Synchro',
|
|
tabBarIcon: ({ color }) => <Pic glyphe="⇅" couleur={color} />,
|
|
}}
|
|
/>
|
|
</Tabs>
|
|
);
|
|
}
|