Appearance
BDD-23 — Recherche et filtrage des dossiers
📄 Ticket fonctionnel
Recherche et filtrage des dossiers
L'administrateur peut rechercher un dossier par nom, nom du client ou e-mail, et filtrer par type de compte (Entreprise / Personnel / Non renseigné) pour retrouver rapidement les fichiers dont il a besoin.
1. User Story
En tant qu'administrateur, Je veux rechercher un dossier ou un client, Afin de retrouver rapidement les fichiers dont j'ai besoin.
2. Critères d'acceptance
- Un champ de recherche filtre en temps réel par nom de dossier, nom du client ou e-mail.
- Un sélecteur permet de filtrer : Tous / Entreprise / Personnel / Non renseigné, sans étirer la barre si d'autres types sont ajoutés.
- Le compteur de dossiers reflète le nombre de résultats filtrés.
- Un message distinct s'affiche quand aucun dossier ne correspond (différent de l'état vide sans dossiers).
- Le filtre Entreprise s'applique quand
client.account_type === 'enterprise'. - Le filtre Personnel s'applique quand
client.account_type === 'personal'. - Le filtre Non renseigné s'applique quand
client.account_typeest absent ounull. - Le filtrage est purement frontend (aucun appel API supplémentaire par frappe).
- L'administrateur peut basculer entre un affichage liste et un affichage grille.
- Le choix Liste / Grille est mémorisé localement.
- L'administrateur peut trier par dernier dépôt, date de création, nom du dossier ou nom du client.
- Le filtre de type affiche les compteurs par catégorie.
3. Périmètre fonctionnel
Backend
| Fichier | Changement |
|---|---|
back/src/api/folders/folder.service.ts | findAll() : client select enrichi avec account_type |
back/src/api/folders/folder.service.spec.ts | Test findAll mis à jour (query attendue) |
Frontend
| Fichier | Rôle |
|---|---|
front/src/utils/folder.js | Utils getFolderAccountType(folder) / getFolderAccountBadge(folder) |
front/src/components/admin/FolderListItem.vue | Badge Entreprise / Personnel / (NR), rendu liste ou grille |
front/src/pages/admin/folders/AdminFoldersPage.vue | searchQuery, typeFilter, sortBy, viewMode, compteurs, tri, barre de recherche + select + bascule d'affichage |
front/src/__tests__/components/admin/FolderListItem.spec.js | Tests badge |
front/src/__tests__/pages/admin/folders/AdminFoldersPage.spec.js | Tests filtrage |
4. Implémentation
Logique de filtrage (AdminFoldersPage.vue)
js
const filteredFolders = computed(() => {
return folders.value.filter((folder) => {
if (typeFilter.value !== 'all' && getFolderAccountType(folder) !== typeFilter.value) {
return false
}
const q = searchQuery.value.trim().toLowerCase()
if (!q) return true
const name = folder.name?.toLowerCase() ?? ''
const clientName = [client?.firstname, client?.lastname].filter(Boolean).join(' ').toLowerCase()
const email = client?.email?.toLowerCase() ?? ''
return name.includes(q) || clientName.includes(q) || email.includes(q)
})
})Classification partagée (front/src/utils/folder.js)
js
export const getFolderAccountType = (folder) => {
const accountType = folder.client?.account_type
if (accountType === 'enterprise' || accountType === 'personal') return accountType
return 'unknown'
}Utilisé dans FolderListItem.vue (badge) et AdminFoldersPage.vue (filtre).
Affichages
viewMode = 'list': lignes compactes, avec colonnes Fichiers / Dernier dépôt / Créé le.viewMode = 'grid': cartes dossier, plus lisibles quand l'admin parcourt visuellement les clients.- La préférence
viewModeest stockée danslocalStoragesousadminFoldersViewMode.
Tri et compteurs
- Les compteurs du filtre sont calculés depuis la liste complète des dossiers chargés.
- Le tri est appliqué après filtrage et recherche.
- Tri disponible : dernier dépôt, création récente, nom du dossier, nom du client.
5. Points de vérification
- Le champ de recherche filtre simultanément sur nom de dossier, nom et e-mail du client.
- Le toggle Entreprise n'affiche que les dossiers dont
client.account_type === 'enterprise'. - Le toggle Personnel n'affiche que les dossiers dont
client.account_type === 'personal'. - Le toggle Non renseigné affiche les dossiers dont
client.account_typeest absent ounull. - Le sélecteur de type reste compact même si de nouveaux types sont ajoutés.
- La bascule Liste / Grille change la disposition sans perdre les actions Renommer / Supprimer.
- Le mode Liste / Grille est conservé après refresh.
- Le tri par nom client et par dates reste cohérent avec le compteur de résultats.
- Le compteur
X dossier(s)reflète les résultats filtrés. - Le message "Aucun dossier ne correspond à votre recherche." s'affiche quand le filtre est actif mais sans résultat.
- Le message "Aucun dossier. Créez-en un pour commencer." s'affiche uniquement quand il n'y a aucun dossier du tout.
- Le badge coloré (bleu = Entreprise, orange = Personnel, gris =
(NR)) est visible sur chaque ligne de dossier.
6. Tests associés
Backend
back/src/api/folders/folder.service.spec.ts—findAll(query avecaccount_type)
Frontend (unitaires)
front/src/__tests__/components/admin/FolderListItem.spec.js— badge Entreprise, Personnel,(NR)front/src/__tests__/pages/admin/folders/AdminFoldersPage.spec.js— filtre par nom, par client, par e-mail, aucun résultat, types Entreprise / Personnel / Non renseigné, affichage grille, persistance du mode, compteurs, tri client, combinaison type + texte
