3.5 KiB
3.5 KiB
#99 — Barre de filtrage de la sidebar sur « Récents » et « Sauvegardes »
Statut : ✅ livré · Version : 2.6.0 · ID : #99 Lié : BUG-049 (icône du bouton « + » de l'assistant), #100 (pastille Deep Research).
Contexte
La barre de recherche/filtrage de la sidebar (#sidebar-filter-input) agissait
historiquement sur les onglets Fichiers (arborescence) et Tags. L'onglet
Historique IA a reçu son propre filtrage en #98. Les onglets Récents et
Sauvegardes (« saved searches ») n'étaient pas couverts : taper dans la barre
n'avait aucun effet dans ces deux vues.
A. Onglet « Récents » — ✅ livré
- Nouveau cache module
_recentQueryet fonction exportéefilterRecentFiles(query)(frontend/js/config.js). _applyRecentFilter(files)filtre le cache_recentFilesCachesur titre, chemin, vault, aperçu et tags, via_sidebarNorm()(normalisationNFD+ suppression des diacritiques + minuscules) — donc insensible à la casse et aux accents.loadRecentFiles()applique désormais le filtre courant après chaque chargement.- Aucun résultat → un message
sidebar.no_resultsest inséré dans#recent-list(classe.sidebar-filter-empty, style existant). switchSidebarTab("recent")applique la requête courante et pose le placeholdersidebar.filter_recent.
B. Onglet « Sauvegardes » — ✅ livré
- Nouveau
_savedQueryet fonction exportéefilterSavedSearches(query)(frontend/js/viewer.js). _applySavedFilter()combine désormais le filtre de type (pills Tous / Recherches / Répertoires) et la requête texte : un élément est visible si sondata-typecorrespond au pill et si son texte (requête, vault, chemins inclus/exclus) contient la requête normalisée (_savedNorm).- Aucun résultat avec une requête active → message
sidebar.no_resultsajouté à#saved-searches-list(nettoyé à chaque ré-application pour ne pas s'accumuler). switchSidebarTab("saved")ré-applique la requête et pose le placeholdersidebar.filter_saved.
C. Routage unifié de la barre de filtrage — ✅ livré
initSidebarFilter() (frontend/js/sidebar.js) est refactorisé autour de deux
fonctions routeFilter(q) / routeClear() qui dirigent la saisie, la bascule
casse (Aa) et le bouton « × » vers le filtre de l'onglet actif :
| Onglet | Filtre |
|---|---|
vaults |
performTreeSearch / restoreSidebarTree |
recent |
filterRecentFiles |
saved |
filterSavedSearches |
ai |
filterAIHistory |
tags |
filterTagCloud |
D. i18n — ✅ livré
sidebar.filter_recent: « Filtrer les fichiers récents... » / "Filter recent files..."sidebar.filter_saved: « Filtrer les recherches sauvegardées... » / "Filter saved searches..."- Le message d'absence de résultat réutilise
sidebar.no_results.
E. Tests — ✅ livré
tests/frontend/sidebar-filters.test.mjs(nouveau, 8 tests) : rendu des listes, filtrage par titre/casse, accents/tags, vault/chemin, restauration, message d'absence de résultat, et combinaison pill + requête sur les sauvegardes.- Ajouté à la liste explicite du job
lintde.gitea/workflows/ci.yml.
F. Points d'attention
- Le filtrage est client-side (les listes sont déjà chargées) : aucune requête réseau supplémentaire n'est déclenchée par la frappe.
- Sur « Sauvegardes », le filtre de type et la requête sont cumulatifs ; vider la barre (ou « × ») ne réinitialise pas le pill actif.