Skip to content

[Refactor] M11-04 — Découper les gros écrans (camera.tsx 830, barcode.tsx 551) #184

Description

@donovan-dev-web

Objectif

Composants trop longs et peu testables : réduire, isoler les fonctions critiques dans des modules dédiés, extraire sous-composants.

Périmètre

  • src/app/scan/camera.tsx (830 lignes) : hooks OCR/caméra extraits, overlay/modes en sous-composants
  • src/app/scan/barcode.tsx (551 lignes) : logique scan code-barres isolée, UI extraite

Livrables

  • Logique pure extraite dans des modules dédiés (tests unitaires)
  • Composants sous 300 lignes chacun
  • Aucun changement de comportement (tests existants verts + tests ajoutés si nécessaire)
  • PR + CI verte

Activity

  1. donovan-dev-web commented on Sep 8, 2026

    @donovan-dev-web
    OwnerAuthor

    Points relayés depuis la revue complète du code (#183, PR #193 mergée) :

    1. collection/index.tsx:85-92 (Mineure) : setState pendant le render pour répondre au changement de params.edition (pattern d'ajustement fragile, pas de correctif trivial sûr).
    2. camera.tsx:86-176 (Mineure) : intervalle d'analyse recréé à chaque changement de state.status (déps correctes, relance inutile à chaque transition).
    3. barcode.tsx / camera.tsx / form-barcode.tsx (Moyenne, partagé avec [Refactor] M11-05 — Découper services & composants métier #185) : styles caméra recopiés à l'identique (reticle 220×220, scanHint, torch, overlays, buttonPressed) — à extraire une fois les écrans découpés.

    Rapport complet : commentaire sur #183.

  2. donovan-dev-web commented on Sep 8, 2026

    @donovan-dev-web
    OwnerAuthor

    Compléments relayés par la passe de validation complémentaire de #183 (2ᵉ revue exhaustive) :

    1. Échec d'initialisation DB ⇒ écran blanc définitif (Élevée) : dbPromise mémorise la promesse rejetée (dependencies.ts:41-44) ; _layout.tsx:33-42 sans .catch → aucune surface d'erreur, application vide. À traiter ici (couche écrans/entrée) ou sur [Refactor] M11-05 — Découper services & composants métier #185.
    2. clearDetail mort ⇒ flash de fiche erronée (Moyenne) : collection/[id]/index.tsx:75 n'affiche le loader que si !detail → en ouvrant la fiche B après A, le contenu de A s'affiche d'abord (loader à conditionner sur l'id, ou clearDetail à appeler au retour — le fix appartient aux screens, la purge à [Refactor] M11-06 — Code mort, commentaires et conventions #186).
    3. collection/[id]/edit.tsx ne charge pas son propre détail (Moyenne) : dépend du store global « déjà rempli » → données périmées en navigation directe/deep-link.
    4. scan/result.tsx : échec de loadDetail = « Statut indisponible » sans retry + boutons Ajouter/Voir masqués (Moyenne) → flux d'ajout bloqué ; ajouter un état d'erreur avec retry.

    Contexte complet : commentaire de validation sur #183.

  3. added 2 commits that reference this issue on Sep 8, 2026
  4. donovan-dev-web commented on Sep 8, 2026

    @donovan-dev-web
    OwnerAuthor

    ✅ Correctifs #184 livrés (PR #198, merge sur develop)

    Le découpage des écrans de scan est complété et couvert :

    Structure

    • Code-barres (scan/barcode.tsx 560 → ~200 lignes) : barcode-styles.ts, barcode-pending-sheets.tsx (confirm/success/unknown continu), barcode-overlay-controls.tsx, hook use-barcode-scanning.ts.
    • Caméra OCR (scan/camera.tsx 841 → ~200 lignes) : camera-ocr-styles.ts, ocr-analyzing-overlay.tsx, ocr-confirm-overlay.tsx, ocr-result-overlay.tsx, ocr-analysis.ts, hook use-ocr-analysis.ts.
    • M-6 : styles privés des écrans mutualisés dans *styles.ts (pas de duplication camera/barcode restante).

    Couverture (composé avec les tests écrans)

    • barcode-pending-sheets.tsx : branches 58 % → 70,8 %
    • ocr-analyzing-overlay.tsx : branches 61,7 % → 82,3 %
    • ocr-confirm-overlay.tsx : branches 57,1 % → 78,6 %
    • +3 suites dédiées (44 tests), total 442 tests, CI Quality verte, seuils de couverture satisfaits.

    Couverture des composants de scan au-dessus du seuil de 70 % (branches et stmts).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epic/identificationIdentificationpriority-mediumPriorité normalerefactorRefactoring sans changement de comportementsize/lGrande (> 1 j, à découper)

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions