// State let currentResults = []; // DOM const searchForm = document.getElementById('searchForm'); const searchBtn = document.getElementById('searchBtn'); const loadingState = document.getElementById('loadingState'); const errorState = document.getElementById('errorState'); const emptyState = document.getElementById('emptyState'); const resultsArea = document.getElementById('resultsArea'); const resultsBody = document.getElementById('resultsBody'); const resultsQuery = document.getElementById('resultsQuery'); const resultsCount = document.getElementById('resultsCount'); const detailPanel = document.getElementById('detailPanel'); const recentSearches = document.getElementById('recentSearches'); function showState(state) { [loadingState, errorState, emptyState, resultsArea].forEach(el => el?.classList.add('hidden')); if (recentSearches) recentSearches.classList.toggle('hidden', state !== 'empty'); state === 'loading' && loadingState?.classList.remove('hidden'); state === 'error' && errorState?.classList.remove('hidden'); state === 'empty' && emptyState?.classList.remove('hidden'); state === 'results' && resultsArea?.classList.remove('hidden'); } // Search searchForm?.addEventListener('submit', async (e) => { e.preventDefault(); const fd = new FormData(searchForm); const data = Object.fromEntries(fd); showState('loading'); searchBtn.disabled = true; searchBtn.innerHTML = ' Searching...'; try { const res = await fetch('/api/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }); const json = await res.json(); if (!res.ok) throw new Error(json.error || 'Search failed'); currentResults = json.results; renderResults(json.results, json.query); } catch (err) { document.getElementById('errorMsg').textContent = err.message; showState('error'); } finally { searchBtn.disabled = false; searchBtn.innerHTML = ' Search'; } }); function renderResults(results, query) { resultsQuery.textContent = query; resultsCount.textContent = results.length; resultsBody.innerHTML = ''; results.forEach((r, i) => { const tr = document.createElement('tr'); tr.className = 'hover:bg-card-hover transition-colors cursor-pointer'; tr.onclick = () => showDetail(r); tr.innerHTML = `
${esc(r.title)}
${esc(r.categoryName || r.address || '')}