Skip to content

[Nom de l'Intégration API Pagefind]

Type de ressource : API JavaScript Pagefind (Recherche programmatique)
Fichier source : src/components/ui/SearchBar.astro ou composant associé
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0


[Description concise du rôle de cette intégration API dans l’architecture de recherche du site]

  • [Objectif principal : ex. fournir une recherche custom avec contrôle total sur l’UI et le comportement]
  • [Bénéfice par rapport à Pagefind UI natif : ex. personnalisation complète, intégration design system]
Couverture Statut
Vitrine [✅/❌]
Blog [✅/❌]
Portfolio [✅/❌]
Documentation [✅/❌]
Tout [✅/❌]
Type d’API Statut
Pagefind JS API [✅/❌]
Pagefind UI custom [✅/❌]
Les deux [✅/❌]
Emplacement Statut
Header global [✅/❌]
Page dédiée [✅/❌]
Modal [✅/❌]
Sidebar [✅/❌]

[Utilisateur]
│ (saisie dans la barre de recherche)
▼
[Composant SearchBar (Astro)]
│ • Import dynamique de Pagefind
│ • Initialisation de l'index
│ • Debounce sur l'input
▼
[Pagefind JS API]
│ • Chargement de l'index chunké
│ • Recherche côté client
│ • Application des filtres
▼
[Résultats]
│ • Extraction des métadonnées
│ • Distinction visuelle par type
│ • Pagination / Limitation
▼
[Interface custom]
│ • Rendu des résultats
│ • Badges (Doc, Blog, Portfolio, Page)
▼
[Utilisateur]
│ (clic sur un résultat)
▼
[Navigation vers la page]
Composant Rôle Fichier
SearchBar.astro Interface de recherche globale src/components/ui/SearchBar.astro
SearchResults.astro Affichage des résultats src/components/ui/SearchResults.astro
SearchFilters.astro Filtres par type de contenu src/components/ui/SearchFilters.astro
Pagefind JS API Bibliothèque JS de recherche pagefind (npm)
Index Pagefind Index chunké généré au build dist/_pagefind/

3. Implémentation de l’API Pagefind (CODE)

Section titled “3. Implémentation de l’API Pagefind (CODE)”
src/components/ui/SearchBar.astro
<div class="search-container" data-pagefind-ignore="all">
<input
type="search"
id="search-input"
placeholder="Rechercher..."
class="search-input"
autocomplete="off"
aria-label="Rechercher dans le site"
/>
<div id="search-results" role="region" aria-label="Résultats de recherche" aria-live="polite">
<!-- Résultats injectés dynamiquement -->
</div>
</div>
<script>
// Import dynamique de Pagefind (lazy loading)
let pagefind: any = null;
async function initPagefind() {
if (pagefind) return;
// Import dynamique pour éviter de charger Pagefind au chargement initial
// @ts-ignore
pagefind = await import('/pagefind/pagefind.js');
await pagefind.init();
}
// Initialisation au premier focus
const searchInput = document.getElementById('search-input');
searchInput?.addEventListener('focus', initPagefind);
</script>
// Fonction de recherche avec filtres
async function search(query: string, filters?: { type?: string }) {
if (!pagefind) await initPagefind();
const results = await pagefind.search(query, {
filter: (result) => {
if (filters?.type) {
return result.meta?.type === filters.type;
}
return true;
},
});
return results;
}

Paramètre Type Validation
query string Non vide
filters object Filtres valides
Élément Type Description
results array Liste des résultats
meta object Métadonnées

Scénario Description Résultat attendu
Initialisation Premier focus Pagefind chargé
Recherche Terme valide Résultats retournés
Filtres Filtre appliqué Résultats filtrés
Scénario Dépendances Description Résultat attendu
Flux complet Index + API Recherche → Résultats Résultats affichés

Composant Type Rôle Méthode d’intégration
SearchBar L2 Interface Composant Astro
Index Build Données Pagefind CLI
  • L’import doit être dynamique (lazy loading)
  • Le debounce doit être configuré
  • Les filtres doivent être cohérents avec les métadonnées
  • L’API est initialisée correctement
  • Les résultats sont pertinents
  • Les filtres fonctionnent
  • Les tests E2E passent

  • ✅ Pas d’exposition de données sensibles
  • ✅ Validation des entrées
  • ✅ Sanitization des requêtes
  • ✅ Limite de résultats

Limite Valeur
Taille de l’index ~10 MB
Temps de chargement ~1s
  • ✅ Lazy loading
  • ✅ Debounce
  • ✅ Pagination

Symptôme Cause probable Solution
Pagefind non chargé Import échoué Vérifier le chemin
Résultats vides Index vide Vérifier le build
Terminal window
# Build local
npm run build
# Preview
npm run preview

  • ✅ Lazy loading de Pagefind
  • ✅ Debounce sur l’input
  • ✅ Filtres cohérents
  • ✅ TypeScript strict
  • ✅ Gestion des erreurs
  • ✅ Accessibilité

  • [Évolution 1]
  • [Évolution 2]
  • ❌ [Limitation 1]
  • ❌ [Limitation 2]


Date Version Description Auteur
YYYY-MM-DD 1.0 Création initiale [Nom]
Edit page

Last updated: