35896-vm/assets/js/main.js
Flatlogic Bot 897ddcfef1 1.2
2025-11-21 12:09:05 +00:00

132 lines
5.1 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const searchForm = document.getElementById('search-form');
const searchInput = document.getElementById('search-input');
const searchBtn = document.getElementById('search-btn');
const resultsContainer = document.getElementById('results-container');
const examples = document.querySelectorAll('.example-link');
// Helper to format currency
const formatCurrency = (value) => new Intl.NumberFormat('nl-NL', { style: 'currency', currency: 'EUR', minimumFractionDigits: 0 }).format(value);
const handleSearch = async (query) => {
if (!query) return;
const originalBtnText = searchBtn.innerHTML;
searchBtn.innerHTML = '<span class="loader"></span>';
searchBtn.disabled = true;
resultsContainer.style.display = 'none';
try {
const response = await fetch(`/api/search.php?query=${encodeURIComponent(query)}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
displayResults(data);
} catch (error) {
console.error("Fetch error: ", error);
displayError('Er is een fout opgetreden. Probeer het later opnieuw.');
} finally {
searchBtn.innerHTML = originalBtnText;
searchBtn.disabled = false;
}
};
searchForm.addEventListener('submit', (e) => {
e.preventDefault();
handleSearch(searchInput.value);
});
examples.forEach(link => {
link.addEventListener('click', (e) => {
e.preventDefault();
const exampleQuery = e.target.textContent;
searchInput.value = exampleQuery;
handleSearch(exampleQuery);
});
});
const displayResults = (data) => {
if (data.error) {
displayError(data.error);
return;
}
// --- Main Header ---
document.getElementById('address-title').textContent = data.adres;
document.getElementById('address-subtitle').textContent = `Gegevens voor ${data.postcode}, ${data.plaats}`;
// --- Basisgegevens ---
document.getElementById('info-postcode').textContent = data.postcode;
document.getElementById('info-plaats').textContent = data.plaats;
document.getElementById('info-gemeente').textContent = data.gemeente;
document.getElementById('info-provincie').textContent = data.provincie;
document.getElementById('info-buurt').textContent = data.buurt;
document.getElementById('info-wijk').textContent = data.wijk;
// --- Kadastrale Info ---
document.getElementById('info-perceelnummer').textContent = data.perceelnummer;
document.getElementById('info-eigendomssituatie').textContent = data.eigendomssituatie;
document.getElementById('info-type').textContent = data.type;
document.getElementById('info-bouwjaar').textContent = data.bouwjaar;
document.getElementById('info-oppervlakte').textContent = data.oppervlakte;
// --- WOZ Waarde ---
document.getElementById('info-woz-waarde').textContent = formatCurrency(data.woz_waarde);
// --- Energielabel ---
document.getElementById('info-energielabel').textContent = data.energielabel;
document.getElementById('info-energiekosten').textContent = `${formatCurrency(data.geschatte_energiekosten)}`;
// --- Buurtstatistieken ---
document.getElementById('info-inwoners').textContent = data.buurtstatistieken.inwoners.toLocaleString('nl-NL');
document.getElementById('info-gem-leeftijd').textContent = `${data.buurtstatistieken.gemiddelde_leeftijd} jaar`;
document.getElementById('info-groen-score').textContent = data.buurtstatistieken.groen_score;
document.getElementById('info-veiligheid-score').textContent = data.buurtstatistieken.veiligheid_score;
// --- Verkoophistorie ---
const historyBody = document.getElementById('verkoophistorie-body');
historyBody.innerHTML = ''; // Clear previous results
data.verkoophistorie.forEach(tx => {
const row = document.createElement('tr');
row.innerHTML = `
<td>${new Date(tx.datum).toLocaleDateString('nl-NL')}</td>
<td>${tx.type}</td>
<td>${formatCurrency(tx.prijs)}</td>
`;
historyBody.appendChild(row);
});
resultsContainer.style.display = 'block';
resultsContainer.scrollIntoView({ behavior: 'smooth' });
};
const displayError = (message) => {
alert(message);
};
});
// Add some CSS for the loader
const style = document.createElement('style');
style.innerHTML = `
.loader {
width: 18px;
height: 18px;
border: 2px solid #FFF;
border-bottom-color: transparent;
border-radius: 50%;
display: inline-block;
box-sizing: border-box;
animation: rotation 1s linear infinite;
}
@keyframes rotation {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
`;
document.head.appendChild(style);