# DAE (Défibrillateur) Feature - Implementation Plan ## Common Context Prefix (include at the top of every task prompt) ``` ## Project Context - DAE Feature Integration You are working on the React Native app "Alerte Secours" at `/home/jo/lab/alerte-secours/apps/as-app/`. Branch: `feat/dae` ### Architecture Overview - **Framework:** React Native with Expo v53 - **Navigation:** React Navigation v6 (Stack → Drawer → Tabs) - `RootStack.js` (Stack) → `Drawer.js` (Drawer) → `Main/index.js` (Material Top Tabs) - Each drawer screen can be a standalone scene or use a Bottom Tab Navigator - **State Management:** Zustand v5 with custom atomic wrapper (`~/lib/atomic-zustand`) - Stores defined in `~/stores/index.js`, each atom in `~/stores/{name}.js` - Usage: `const { foo } = useFooState(["foo"])` or `fooActions.doSomething()` - **Maps:** MapLibre React Native (`@maplibre/maplibre-react-native`) - Map components in `~/containers/Map/` (Camera, MapView, FeatureImages, ShapePoints, etc.) - Route calculation via OSRM in `~/scenes/AlertCurMap/routing.js` - Clustering via supercluster in `useFeatures` hooks - **Styling:** React Native Paper v5 + custom `createStyles()`/`useStyles()` from `~/theme` - **Icons:** `@expo/vector-icons` (MaterialCommunityIcons, MaterialIcons, Entypo) - **Forms:** React Hook Form - **GraphQL:** Apollo Client v3 - **Module alias:** `~` maps to `src/` ### Key Existing Patterns **Drawer Screen Registration** (`src/navigation/Drawer.js`): - Screens are `` - Hidden screens use `options={{ hidden: true }}` - Menu item sections are organized by index ranges in `DrawerItemList.js` (indices 0-4 = "Alerter", 5-8 = "Mon compte", 9+ = "Infos pratiques") **Header Titles** (`src/navigation/RootStack.js`): - `getHeaderTitle(route)` switch-case maps route names to display titles **Bottom Tab Navigator Pattern** (reference: `src/scenes/AlertAgg/index.js`): - `createBottomTabNavigator()` with `Tab.Screen` entries - `screenOptions={{ headerShown: false, tabBarLabelStyle: { fontSize: 13 }, lazy: true, unmountOnBlur: true }}` - Tab icons use MaterialCommunityIcons **Action Buttons Pattern** (reference: `src/scenes/AlertCurOverview/index.js`): - `