- clic sur un repertoire de l'arbre (modes focus vault et All) ouvre un onglet de navigation dedie qui coexiste avec les onglets de fichiers ouverts
- vue: sous-repertoires cliquables, facettes Vaults/Tags/Extensions (meme mecanisme que la recherche), tris Pertinence/Date, bouton Sauver; tags indexes exposes par GET /api/vault/{v}/files
- BUG-100: showWelcome re-injecte la section Raccourcis & Astuces et goHome efface la recherche globale + le filtre de la sidebar
60 lines
3.5 KiB
Markdown
60 lines
3.5 KiB
Markdown
# #158 — Navigation : vue répertoire en onglet, filtres & tris, retour Home complet
|
|
|
|
> **Statut :** livré le 2026-10-02 · **ID :** `#158` (correctif associé : `BUG-100`)
|
|
> **Fichiers :** `frontend/js/vaulthome.js`, `frontend/js/ui.js`, `frontend/js/sidebar.js`,
|
|
> `frontend/js/navfacets.js` (nouveau), `frontend/js/viewer.js`, `frontend/js/legacy.js`,
|
|
> `backend/services/vaults.py`, `backend/schemas.py`, `frontend/style.css`,
|
|
> `frontend/locales/{fr,en}.json`
|
|
|
|
## Problème
|
|
|
|
La vue « chemin + Récents + fichiers du répertoire » (vault home) ne s'affichait qu'en mode
|
|
focus vault, disparaissait dès qu'un fichier était ouvert (aucun onglet), ne listait pas les
|
|
sous-répertoires, n'avait ni filtre ni tri, et le clic sur le titre ne rendait pas la vraie
|
|
page d'accueil.
|
|
|
|
## Conception
|
|
|
|
**Un onglet de navigation par vault.** `TabManager.openNav(vault, dir)` (`frontend/js/ui.js`)
|
|
crée/rétarget l'onglet `nav::<vault>` (icône dossier) ; `TabManager.activate()` branche sur
|
|
`cache.nav` et rend `showVaultHome(vault, dir)` au lieu de fetcher un fichier. Les onglets de
|
|
fichiers ne sont jamais fermés. Le dashboard appelle `TabManager.deactivate()` : aucun onglet
|
|
ne reste « actif », donc un clic suivant ré-éffectue réellement l'onglet (avant : early-return
|
|
et vue figée).
|
|
|
|
Points d'entrée des clics (`frontend/js/sidebar.js`) : clic **répertoire** dans l'arbre (2 sites,
|
|
mode focus et mode All), changement de contexte vault (sélecteur), facettes/filtres et fil
|
|
d'Ariane de la vue (`vaulthome.js` route tout par `openNav`, plus aucune délégation sur
|
|
l'arbre). La **ligne d'un vault** garde son rôle d'expansion seul : un onglet de navigation à
|
|
l'ouverture d'un vault casserait les compteurs d'onglets et « fermer le dernier onglet →
|
|
dashboard » (13 tests E2E `split-view*`).
|
|
|
|
**Contenu de la vue** (`vaulthome.js`) : fil d'Ariane · barre **Pertinence / Date** + **Sauver**
|
|
· panneau de facettes · **Répertoires** cliquables (`GET /api/browse`) · Récents (racine) ·
|
|
fichiers (`GET /api/vault/{v}/files?recursive=false`). Les facettes réutilisent les classes de
|
|
la page de recherche (`search-facets`, `search-sort`, `search-save-btn`) — même visuel, même
|
|
repli `obsigate_facets_collapsed`, filtrage **local** (pas de nouvelle requête).
|
|
|
|
**Facettes** (`frontend/js/navfacets.js`, pur, sans DOM) : `buildNavFacets`,
|
|
`filterNavFiles`, `sortNavFiles`. Le listing embarque les tags indexés :
|
|
`GET /api/vault/{v}/files` renvoie `tags` (`_indexed_tags()` dans
|
|
`backend/services/vaults.py`, lookup `vault::path` dans l'index inversé, `[]` si non indexé).
|
|
|
|
## Décisions / limites connues
|
|
|
|
- **Un seul onglet de navigation par vault** : cliquer un autre répertoire re-cible le même
|
|
onglet (pas d'empilement d'onglets). En mode split, la vue s'affiche dans la zone principale.
|
|
- **« Pertinence » = tri alphabétique** (`ponytail:` commenté) : un listing de répertoire n'a
|
|
aucun signal de pertinence tant que la vue n'a pas sa propre requête — voir
|
|
`navfacets.js::sortNavFiles`.
|
|
- Facettes calculées sur la liste courante (répertoire non récursif, 200 fichiers max) : les
|
|
sous-répertoires non listés n'apportent aucune compte.
|
|
|
|
## Tests
|
|
|
|
- `tests/test_nav_files.py` (3) : `tags` exposés + survivent au `response_model`, tags en
|
|
sous-répertoire, miss d'index → `[]`.
|
|
- `tests/frontend/navfacets.test.mjs` (10) : comptages, filtres tag/ext (insensible au point),
|
|
combinaison ET, tris, non-mutation.
|
|
- `tests/frontend/unit.test.mjs` : `navfacets.js` ajouté à la liste des modules purs.
|