mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-06-28 01:53:40 +02:00
docs(knowledge): capitalisation frontend — intégration du triage local (mai-juin 2026)
Triage et intégration des propositions frontend du buffer 95_a_capitaliser.md (lot local RL799_V2/Vue3 + app-alexandrie/RN-Expo, mai-juin 2026). ~73 entrées intégrées sur knowledge/frontend/ + 1 nouveau fichier, dont : - patterns/state.md : race-token partagé latest-wins (fusion 3 props), capture sync anti-race, event bus timestamp, clé cache composite, état dérivé = computed - risques/state.md : 9 risques Zustand/store (fetchId reset, useRef remount, re-fetch infini sur [], flag optimiste écrasé, cache détail/liste stale, latch sans reset, :key index) - patterns/navigation.md : Expo Router (tab bar, useFocusEffect, Href typé, routing pur fusionné) - patterns/general.md : helpers temps purs, composants génériques + skeleton, fail-fast, touch target - risques/general.md : 24 risques (sweep statique, filtre client liste paginée, hooks avant return, a11y VoiceOver/disabled, redirection allowlist, RangeError toISOString, section i18n...) - design-tokens (cluster theming light/dark MD3), tests, performance, react-native, nextjs - NOUVEAU risques/responsive.md (gating par capacité d'input + checklist régressions mobile) - READMEs patterns/risques mis à jour Doublons inter-fichiers évités (vérifié : aucune ancre dupliquée introduite). Rejets (doublons 91/9/87), reciblages workflow (156/257) et bloc 32 (CLAUDE projet) non intégrés ici. Source 95_a_capitaliser.md non purgée (purge en fin de capitalisation complète). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -320,3 +320,62 @@ const routes = [
|
||||
- Contexte technique : Expo Router — app-alexandrie 25-06-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-icone-decouplee-destination-renommage-route"></a>
|
||||
## Découplage icône / destination lors d'un renommage de route
|
||||
|
||||
### Risques
|
||||
|
||||
- Lors du renommage d'une route (ex. `/settings` → `/profile`), l'URL, l'`accessibilityLabel` et le texte visible sont mis à jour, mais **l'icône** est oubliée
|
||||
- Le grep capte les `href=`/`router.push` mais pas les `<Icon name="..." />`, souvent rangés dans des constantes éloignées de la logique de nav
|
||||
|
||||
### Symptômes
|
||||
|
||||
- L'utilisateur voit une icône engrenage menant à un écran "Profil"
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
À chaque callsite d'une route renommée, auditer **4 dimensions**, pas seulement l'URL :
|
||||
|
||||
1. La destination (`href`, `router.push`, `<Redirect>`)
|
||||
2. L'`accessibilityLabel`
|
||||
3. Le texte visible (`label`, `title`)
|
||||
4. **L'icône** (`<Ionicons name="..." />`, `<MaterialIcons name="..." />`)
|
||||
|
||||
```tsx
|
||||
// ❌ engrenage vers un écran Profil
|
||||
<Pressable onPress={() => router.push('/(tabs)/profile')} accessibilityLabel="Profil">
|
||||
<Ionicons name="settings-outline" size={28} />
|
||||
</Pressable>
|
||||
// ✅
|
||||
<Pressable onPress={() => router.push('/(tabs)/profile')} accessibilityLabel="Profil">
|
||||
<Ionicons name="person-circle-outline" size={28} />
|
||||
</Pressable>
|
||||
```
|
||||
|
||||
- Penser aussi aux constantes de tabs (`TAB_CONFIG`, `TABS`) lors du grep
|
||||
- Contexte technique : React Native / Expo Router — app-alexandrie review IA-v2.1, 27-05-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-nav-activation-path-vs-query"></a>
|
||||
## Sous-items de nav partageant un path, distincts par la query → activation sur le path seul
|
||||
|
||||
### Risques
|
||||
|
||||
- Deux liens `/x?mode=a` et `/x?mode=b` dans une sidebar dont l'activation fait `route.path.startsWith(item.to)`
|
||||
- Double piège : si `item.to` est le path pur (`/x`), les deux s'allument ; si `item.to` contient déjà la query (`/x?mode=a`), aucun ne s'allume (`route.path` vaut `/x` sans query)
|
||||
|
||||
### Symptômes
|
||||
|
||||
- Deux entrées de sidebar actives simultanément, ou aucune active, sur des routes qui ne diffèrent que par la query
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
1. Garder `item.to` comme **path pur** pour la cible router-link, OU splitter path/query avant de passer à router-link (Vue Router encode le `?` si on passe une string `path?query` → la route ne matche pas)
|
||||
2. Passer `{ path, query }` séparés à router-link, pas une string concaténée
|
||||
3. Ajouter un discriminant explicite `queryMatch: { key, value }` et tester `route.query[key] === value` pour l'activation
|
||||
|
||||
- Contexte technique : Vue 3 / Vue Router — RL799 (sidebar admin Surveillants, query `?office=`), revue adversariale de spec, 14-06-2026
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user