// Dubai DLD Analytics Dashboard JavaScript // No inline scripts or handlers to satisfy CSP const API_BASE = '/api'; // Helper functions function showLoading(show) { document.getElementById('loading').style.display = show ? 'block' : 'none'; } function showError(message) { const errorDiv = document.getElementById('error'); errorDiv.textContent = message; errorDiv.style.display = 'block'; } function hideError() { document.getElementById('error').style.display = 'none'; } // Clear results function clearResults() { document.getElementById('cardsContainer').innerHTML = ''; document.getElementById('chartsContainer').innerHTML = ''; document.getElementById('queryInput').value = ''; hideError(); } // Render cards function renderCards(cards) { const container = document.getElementById('cardsContainer'); container.innerHTML = cards.map(card => `
${card.title}
${card.value}
${card.subtitle}
`).join(''); } // Render charts function renderCharts(visualizations) { const container = document.getElementById('chartsContainer'); container.innerHTML = ''; visualizations.forEach((viz, index) => { const chartDiv = document.createElement('div'); chartDiv.className = 'chart-container'; chartDiv.innerHTML = `
${viz.title}
`; container.appendChild(chartDiv); const canvas = document.getElementById(`chart${index}`); const ctx = canvas.getContext('2d'); new Chart(ctx, { type: viz.type, data: viz.data, options: viz.options || {} }); }); } // Process query async function processQuery(query) { if (!query || query.trim() === '') { showError('Please enter a query'); return; } showLoading(true); hideError(); try { const response = await fetch(`${API_BASE}/query`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query }) }); const data = await response.json(); if (data.success && data.data) { // Render cards and charts if (data.data.cards && data.data.cards.length > 0) { renderCards(data.data.cards); } if (data.data.visualizations && data.data.visualizations.length > 0) { renderCharts(data.data.visualizations); } } else { showError(data.message || 'Failed to process query'); } } catch (error) { showError('Network error: ' + error.message); } finally { showLoading(false); } } // Event listeners setup document.addEventListener('DOMContentLoaded', () => { // Analyze button const btnAnalyze = document.getElementById('btn-analyze'); btnAnalyze.addEventListener('click', async () => { const query = document.getElementById('queryInput').value; await processQuery(query); }); // Clear button const btnClear = document.getElementById('btn-clear'); btnClear.addEventListener('click', clearResults); // Predefined query buttons document.getElementById('btn-rental-trend').addEventListener('click', async () => { const query = 'Give me the last 6 months rental price trend for Business Bay'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-top-areas').addEventListener('click', async () => { const query = 'Which area is having more rental transactions?'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-project-summary').addEventListener('click', async () => { const query = 'Brief about the Project'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-commercial-leasing').addEventListener('click', async () => { const query = 'Top 5 areas for Commercial leasing and why?'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-residential-leasing').addEventListener('click', async () => { const query = 'Top 5 areas for Residential leasing and why?'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-example-marina').addEventListener('click', async () => { const query = 'Give me the last 6 months rental price trend for Dubai Marina'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-example-top-areas').addEventListener('click', async () => { const query = 'Which area is having more rental transactions?'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-example-villas').addEventListener('click', async () => { const query = 'Show me villa transactions in Dubai Marina'; document.getElementById('queryInput').value = query; await processQuery(query); }); document.getElementById('btn-example-3bhk').addEventListener('click', async () => { const query = 'Avg price of 3 BHK apartment by area in last 6 months'; document.getElementById('queryInput').value = query; await processQuery(query); }); // Enter key support document.getElementById('queryInput').addEventListener('keypress', async (e) => { if (e.key === 'Enter') { const query = e.target.value; await processQuery(query); } }); });