// assets/js/va-filters.js (function () { function $(id) { return document.getElementById(id); } const q = $('va_q'); const cat = $('va_cat'); const tag = $('va_tag'); const min = $('va_min'); const max = $('va_max'); const orderby = $('va_orderby'); const results = $('vaResults'); const status = $('vaStatus'); if (!results) return; let timer = null; async function fetchResults() { if (status) status.textContent = 'Recherche...'; const form = new FormData(); form.append('action', 'va_filter_products'); form.append('nonce', VA_FILTERS.nonce); form.append('q', q ? q.value : ''); form.append('cat', cat ? cat.value : 'all'); form.append('tag', tag ? tag.value : 'all'); form.append('min', min ? min.value : ''); form.append('max', max ? max.value : ''); form.append('orderby', orderby ? orderby.value : 'date_desc'); try { const r = await fetch(VA_FILTERS.ajaxurl, { method: 'POST', body: form }); const data = await r.json(); if (!data.success) { results.innerHTML = `
Erreur: ${data.data?.message || 'inconnue'}
`; } else { results.innerHTML = data.data.html; } } catch (e) { results.innerHTML = `
Erreur réseau
`; } finally { if (status) status.textContent = ''; } } function schedule() { clearTimeout(timer); timer = setTimeout(fetchResults, 200); } [q, cat, tag, min, max, orderby].forEach(el => { if (!el) return; el.addEventListener('input', schedule); el.addEventListener('change', schedule); }); // 1er chargement fetchResults(); })();