Événements et API JavaScript
Le widget expose window.findalo :
un bus d'événements de tout ce qui se passe dans le moteur de recherche et des méthodes pour le contrôler depuis ton code.
Ton JS peut vivre dans ta boutique ou dans l'éditeur du panneau (Apparence → Avancé).
Événements
| Événement | Payload | Quand |
|---|---|---|
| search | { query, total, took_ms, match_mode, lang } | Chaque recherche exécutée (query de 2+ caractères). match_mode indique si les résultats sont directs ou suggérés (« fallback »). |
| zero | { query, total: 0, took_ms, match_mode, lang } | Recherche avec 0 résultat. Rare : le moteur de recherche ne laisse jamais l'écran vide — le vrai signal « aucun résultat » est search avec match_mode « fallback ». |
| click | { product_id, product_name, product_url, price, currency, query, position } | Clic sur un produit des résultats. |
| add-to-cart | { product_id, product_name, price, currency, quantity, cart_count } | Produit ajouté au panier depuis le moteur de recherche. |
| quick-view | { product_id, product_name, product_url, price, currency, query, position } | Ouverture de l'aperçu rapide d'un produit. |
| cart-open | { cart_count } | Ouverture du panneau du panier depuis l'en-tête du moteur de recherche. |
| express-purchase | { payment_intent, order_id, reference } | Achat finalisé via le checkout express (s'il est actif). |
| open | { prefill } | Ouverture du moteur de recherche. prefill porte la query initiale s'il y en a une. |
| close | {} | Fermeture du moteur de recherche. |
| context | el objeto window.FINDALO_CTX completo | El contexto de navegación ya resuelto, con la parte privada (carrito y cliente) incluida. Dispara una vez por carga de página. Ver /devs/contexto. |
Exemples
Envoyer les recherches à ton GA4
findalo.on('search', (e) => {
gtag?.('event', 'site_search', { search_term: e.query, results: e.total });
}); (Pour GA4, il y a une intégration sans code dans le panneau — Analytique → Renvoi vers ton GA4. N'écris la tienne que si tu as besoin de quelque chose de différent.)
Détecter les recherches sans résultats réels
// Le moteur de recherche ne laisse jamais l'écran vide : si rien ne
// matche, il montre des suggestions avec match_mode 'fallback'. C'est
// le vrai signal « aucun résultat » — l'événement 'zero' ne se
// déclenche presque jamais.
findalo.on('search', (e) => {
if (e.match_mode === 'fallback') {
// ex. ouvrir ton chat de support avec la query
}
}); Ouvrir le moteur de recherche depuis tes propres éléments
document.querySelector('#hero-buscar')
?.addEventListener('click', () => findalo.open());
// ou directement avec une query :
findalo.search('crema hidratante'); Méthodes et propriétés
| Méthode / propriété | Ce qu'elle fait |
|---|---|
| findalo.on(event, callback) | S'abonne à un événement du bus. Retourne une fonction pour se désabonner. |
| findalo.open(query?) | Ouvre le moteur de recherche, avec en option une query initiale. |
| findalo.search(query) | Ouvre le moteur de recherche et exécute la query. |
| findalo.close() | Ferme le moteur de recherche. |
| findalo.tenant | Slug du moteur de recherche (lecture seule). |
| findalo.lang | Langue active du widget (lecture seule). |
| findalo.version | Version de l'API JS (lecture seule). |
| findalo.context() | Contexto de navegación de la página: la misma variable window.FINDALO_CTX (tipo de página, ids, idioma, divisa, carrito, cliente). Ver /devs/contexto. |
| findalo.onContext(callback) | Ejecuta el callback con el contexto COMPLETO (carrito y cliente ya resueltos); si ya lo está, en el acto. Es la vía correcta si dependes del carrito. |
Garantie : les noms d'événements et les clés de leurs payloads sont un contrat stable — nous pouvons ajouter de nouveaux champs, jamais renommer ni supprimer les existants.