Callbacks
Ejecuta código personalizado cuando ocurren eventos en el widget.
Callbacks disponibles
NeuroonWidget.init({
// ...
callbacks: {
onSearch: (query, results) => {},
onResultClick: (product) => {},
onFilterChange: (filters) => {},
onError: (error) => {},
onOpen: () => {},
onClose: () => {},
},
});
onSearch
Se ejecuta después de cada búsqueda.
onSearch: (query, results) => {
console.log(`Búsqueda: "${query}"`);
console.log(`Resultados: ${results.length}`);
// Enviar a analytics
analytics.track('Search', {
query,
resultsCount: results.length,
});
}
Parámetros:
query(string): Término de búsquedaresults(Product[]): Array de productos encontrados
onResultClick
Se ejecuta cuando el usuario hace clic en un producto.
onResultClick: (product) => {
console.log('Producto:', product.name);
// Tracking de conversión
fbq('track', 'ViewContent', {
content_ids: [product.id],
content_name: product.name,
value: product.price,
currency: 'EUR',
});
// Redirigir al producto
window.location.href = product.url;
}
Parámetros:
product(Product): Objeto del producto clickeado
interface Product {
id: string;
name: string;
description?: string;
price: number;
salePrice?: number;
currency: string;
url: string;
imageUrl?: string;
categories: string[];
brands: string[];
inStock: boolean;
}
onFilterChange
Se ejecuta cuando cambian los filtros.
onFilterChange: (filters) => {
console.log('Filtros aplicados:', filters);
// Guardar preferencias
localStorage.setItem('userFilters', JSON.stringify(filters));
}
Parámetros:
filters(AppliedFilters): Filtros activos
interface AppliedFilters {
priceMin?: number;
priceMax?: number;
categories?: string[];
brands?: string[];
tags?: string[];
inStock?: boolean;
onSale?: boolean;
}
onError
Se ejecuta cuando ocurre un error.
onError: (error) => {
console.error('Error en Neuroon:', error);
// Reportar a Sentry
Sentry.captureException(error);
// Mostrar mensaje al usuario
showNotification('Error al buscar. Inténtalo de nuevo.');
}
Parámetros:
error(Error): Objeto de error
onOpen / onClose
Se ejecutan cuando el modal se abre o cierra.
onOpen: () => {
// Pausar scroll del body
document.body.style.overflow = 'hidden';
// Analytics
analytics.track('Search Opened');
},
onClose: () => {
// Restaurar scroll
document.body.style.overflow = '';
}
Ejemplo completo
NeuroonWidget.init({
container: '#neuroon-search',
token: 'YOUR_TOKEN',
callbacks: {
onSearch: (query, results) => {
// Google Analytics
gtag('event', 'search', { search_term: query });
// Hotjar
hj('event', 'search_performed');
},
onResultClick: (product) => {
// Facebook Pixel
fbq('track', 'ViewContent', {
content_ids: [product.id],
content_type: 'product',
value: product.price,
currency: product.currency,
});
// Google Analytics
gtag('event', 'select_item', {
items: [{
item_id: product.id,
item_name: product.name,
price: product.price,
}],
});
},
onFilterChange: (filters) => {
gtag('event', 'filter_applied', {
filters: JSON.stringify(filters),
});
},
onError: (error) => {
Sentry.captureException(error);
},
},
});