---
name: project_settings_admin_refacto
description: Refactorisation Settings.jsx (3070 lignes) et Admin.jsx en composants autonomes — structure finale et imports manquants corrigés
metadata: 
  node_type: memory
  type: project
  originSessionId: ab8b89ba-75a8-4b6e-a0b4-5180e6c20e4a
---

Settings.jsx et Admin.jsx ont été découpés en composants autonomes (chacun avec son propre fetch, sans props drilling depuis le parent).

**Structure finale :**

- `pages/Settings.jsx` → shell 97 lignes, routing `?section=` uniquement
- `pages/Admin.jsx` → shell 74 lignes, routing `?section=` uniquement
- `pages/admin/adminHelpers.jsx` — `fmt`, `Badge`, `StatusBadge`
- `pages/admin/UsersSection.jsx` — fetch `/admin/users`
- `pages/admin/CreateUserSection.jsx` — POST `/admin/users`
- `pages/admin/JobLogsSection.jsx` — fetch `/admin/job-logs`
- `pages/admin/IconsSection.jsx` — fetch `/icons`
- `pages/settings/AppearanceSection.jsx` — thème, police, couleurs graphiques
- `pages/settings/PlateformesSection.jsx` — CRUD plateformes, export CSV/XLS, PlatDetailPanel
- `pages/settings/CategoriesInvSection.jsx` — CRUD catégories d'investissement
- `pages/settings/SecteursInvSection.jsx` — CRUD secteurs d'investissement
- `pages/settings/ComptesSection.jsx` — CRUD comptes courants/PEA-PME
- `pages/settings/MaFiscaliteSection.jsx` — toggle PFO
- `pages/settings/DataCleanupSection.jsx` — nettoyage données
- `pages/settings/ImportsSection.jsx` — import CSV/XLS/ZIP

**Imports à ne pas oublier dans les sections (erreurs rencontrées) :**

- `PlateformesSection` : `useNavigate` (react-router-dom), `memberLabel` + `fmtDate` (format.js), `ResultBanner`
- `ComptesSection` : `Modal`, `memberLabel` (format.js), `TYPE_COMPTE_LABELS` et `EXONERATION_LABELS` (constantes locales)
- `ImportsSection` : `ResultBanner`, `fmtDate` (format.js)
- `DataCleanupSection` : ne pas laisser traîner le bloc NAV de Settings (bug d'extraction)

**Bugs d'extraction corrigés :**
- `platsToXLS` tronquée → compléter à la main avec Python
- `\n` littéral dans `.join('\n')` → remplacer par séquence escape
- `platImportRef` déclarée deux fois → supprimer le doublon
- Bloc NAV de Settings collé à la fin de DataCleanupSection → couper au marqueur `/* ── Nav`
- Extra `);` en fin de CategoriesInvSection et SecteursInvSection → supprimer
- `saveCatInv` sans signature `async` → insérer l'entête manquant

**Why:** Settings.jsx à 3070 lignes causait des troncatures et des bugs à chaque modification. Découpage en composants autonomes pour éviter ces problèmes.

**How to apply:** Pour toute nouvelle section Settings ou Admin, créer un fichier autonome dans `pages/settings/` ou `pages/admin/`, avec ses propres imports et son propre `useEffect`/fetch. Ne jamais remonter l'état au parent.
