Contexte
La table de contacts de LeadMiner devient lente lorsque le dataset dépasse ~1000 enregistrements.
La pagination est déjà en place et doit être conservée.
Objectif
Optimiser le rendu frontend sans modifier l'expérience utilisateur ni les fonctionnalités métier.
Contraintes obligatoires
- Conserver la pagination existante
- Conserver les colonnes visibles par défaut
- Conserver le bouton
pi pi-id-card
- Conserver le comportement des filtres
- Conserver les options DataTable:
showGridlines, reorderableColumns, resizableColumns
- Ne pas modifier l'API backend
- Ne pas remplacer PrimeVue DataTable
- Ne pas introduire de virtual scroll
- Ne pas supprimer de fonctionnalités métier
Fichiers concernés
frontend/src/components/mining/table/MiningTable.vue
frontend/src/stores/filters.ts
frontend/src/components/icons/SocialLinksAndPhones.vue
frontend/src/components/icons/NormalizedLocation.vue
Travaux à réaliser
- Stabiliser la référence de l'array
rows
- Vérifier
dataKey stable (id si disponible, sinon email)
- Supprimer les dépendances directes aux stores dans les cellules (aliases
computed)
- Remplacer les
includes() en cellules par une map de visibilité computed
- Préparer les données avec
preparedRows
- Optimiser la colonne Contact (montage conditionnel de composants lourds)
- Limiter l'affichage des tags (max 2 +
+N)
- Simplifier les cellules statut/consentement (HTML simple si possible)
- Déplacer les calculs hors templates
- Ajouter un debounce 200-300ms à la recherche globale
- Réduire la profondeur DOM des cellules
- Stabiliser la hauteur des lignes pour fluidifier le scroll
Critères d'acceptation
- Même UX et mêmes fonctionnalités métier
- Moins de rerenders globaux
- Moins de composants montés par ligne
- Moins de calculs dans les cellules
- Scroll plus fluide sur dataset >1000 lignes
Contexte
La table de contacts de LeadMiner devient lente lorsque le dataset dépasse ~1000 enregistrements.
La pagination est déjà en place et doit être conservée.
Objectif
Optimiser le rendu frontend sans modifier l'expérience utilisateur ni les fonctionnalités métier.
Contraintes obligatoires
pi pi-id-cardshowGridlines,reorderableColumns,resizableColumnsFichiers concernés
frontend/src/components/mining/table/MiningTable.vuefrontend/src/stores/filters.tsfrontend/src/components/icons/SocialLinksAndPhones.vuefrontend/src/components/icons/NormalizedLocation.vueTravaux à réaliser
rowsdataKeystable (idsi disponible, sinonemail)computed)includes()en cellules par une map de visibilitécomputedpreparedRows+N)Critères d'acceptation