`;
}
resultsEl.innerHTML = html;
}
async function performSearch(queryText) {
if (!queryText) {
return {};
}
const queries = ALGOLIA_INDEXES.map(indexName => ({
indexName: indexName,
query: queryText,
params: {
hitsPerPage: 4
}
}));
try {
const { results } = await client.multipleQueries(queries);
return results.reduce((acc, result) => {
acc[result.index] = {
hits: result.hits,
nbHits: result.nbHits,
}
return acc;
}, {});
} catch (err) {
console.error("Algolia search error:", err);
resultsEl.innerHTML = '
Search is not available (check console).
';
return {};
}
}
input.addEventListener('input', () => {
const q = input.value.trim();
lastQuery = q;
clearTimeout(debounceTimer);
debounceTimer = setTimeout(async () => {
if (!q) return renderResults({});
try {
const resultsByCategory = await performSearch(q);
if (q !== lastQuery) return;
renderResults(resultsByCategory);
} catch (err) {
console.error("Algolia search error:", err);
resultsEl.innerHTML = '
Search is not available (check console).
';
}
}, 120);
});
// Allow Escape to close panel
input.addEventListener('keydown', (e) => {
if (e.key === 'Escape') closePanel();
});
btn.addEventListener('click', (e) => {
e.preventDefault();
e.stopPropagation();
const isOpen = panel.classList.contains(ACTIVE_CLASS);
if (!isOpen) {
openPanel();
} else {
closePanel();
}
});
document.addEventListener('click', (e) => {
const isClickInsidePanel = panel.contains(e.target);
const isClickOnToggle = btn.contains(e.target);
if (!isClickInsidePanel && !isClickOnToggle && panel.classList.contains(ACTIVE_CLASS)) {
closePanel();
}
});
function submitSearch() {
const query = encodeURIComponent(input.value.trim());
if (query) {
window.location.href = `/search-results?q=${query}`;
}
}
btnSubmit.addEventListener('click', (e) => {
e.preventDefault(); // prevents form submit
e.stopPropagation(); // optional: stops bubbling to form handlers
submitSearch();
});
input.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
event.preventDefault();
submitSearch();
}
});
})();