diff --git a/webapps/geojson_viewer/google-sheets-config.js b/webapps/geojson_viewer/google-sheets-config.js new file mode 100644 index 0000000..ac0304f --- /dev/null +++ b/webapps/geojson_viewer/google-sheets-config.js @@ -0,0 +1,135 @@ +// Google Sheets Configuration for GeoJSON Viewer +// This file connects to the Google Sheet for live mills data + +const GOOGLE_SHEETS_CONFIG = { + // Your Google Sheet ID (from the URL) + SHEET_ID: '1ZHEIyhupNDHVd1EScBn0DnuiAzMFoZcAPZm3U65abkY', + + // The sheet name or gid (the sheet tab you want to read from) + SHEET_NAME: 'Sheet1', // Change this to your actual sheet name if different + + // Auto-refresh interval in milliseconds (5 minutes = 300000ms) + REFRESH_INTERVAL: 300000, + + // Enable auto-refresh (set to false to disable) + AUTO_REFRESH_ENABLED: true +}; + +/** + * Fetch data from Google Sheet via Netlify Function + * The function keeps credentials secret on the server + */ +async function fetchGoogleSheetData() { + try { + // Call Netlify function instead of Google Sheets directly + // This keeps the Sheet ID and password hidden from browser dev tools + const response = await fetch('/.netlify/functions/get-mills'); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const csvText = await response.text(); + console.log('✓ Data fetched from Netlify Function (Google Sheet)'); + return csvText; + } catch (error) { + console.error('Error fetching data from Netlify Function:', error); + return null; + } +} + +/** + * Initialize auto-refresh of data from Google Sheet + */ +function initGoogleSheetsAutoRefresh() { + if (!GOOGLE_SHEETS_CONFIG.AUTO_REFRESH_ENABLED) { + console.log('Google Sheets auto-refresh is disabled'); + return; + } + + console.log(`✓ Auto-refresh enabled (every ${GOOGLE_SHEETS_CONFIG.REFRESH_INTERVAL / 1000 / 60} minutes)`); + + // Refresh periodically + setInterval(async () => { + console.log('🔄 Refreshing mills data from Google Sheet...'); + const csvData = await fetchGoogleSheetData(); + + if (csvData && millsToggle && millsToggle.checked) { + // Parse new data + mills = parseMillsCSV(csvData); + + // Render updated mills if layer is visible + if (millsLayer && map.hasLayer(millsLayer)) { + renderMills(); + } + + console.log(`✓ Updated ${mills.length} mills from Google Sheet`); + } + }, GOOGLE_SHEETS_CONFIG.REFRESH_INTERVAL); +} + +/** + * Show notification to user + */ +function showNotification(message, type = 'info') { + const colors = { + 'success': '#4CAF50', + 'warning': '#FF9800', + 'error': '#F44336', + 'info': '#2196F3' + }; + + const notification = document.createElement('div'); + notification.style.cssText = ` + position: fixed; + top: 20px; + right: 20px; + background: ${colors[type] || colors.info}; + color: white; + padding: 15px 20px; + border-radius: 5px; + z-index: 9999; + box-shadow: 0 2px 8px rgba(0,0,0,0.2); + font-weight: 500; + `; + notification.textContent = message; + document.body.appendChild(notification); + + setTimeout(() => { + notification.style.transition = 'opacity 0.3s ease'; + notification.style.opacity = '0'; + setTimeout(() => notification.remove(), 300); + }, 4000); +} + +/** + * Provide setup instructions to the user + */ +function showGoogleSheetsSetup() { + console.log(` + ╔════════════════════════════════════════════════════════════╗ + ║ Google Sheets Integration for GeoJSON Viewer Mills ║ + ╠════════════════════════════════════════════════════════════╣ + ║ ║ + ║ 1. Sugar mills data is configured and ready! ║ + ║ ║ + ║ 2. The map will automatically update every 5 minutes ║ + ║ with new data from the Google Sheet ║ + ║ ║ + ║ 3. To change refresh interval, edit: ║ + ║ GOOGLE_SHEETS_CONFIG.REFRESH_INTERVAL ║ + ║ ║ + ║ 4. Column headers required (case-sensitive): ║ + ║ - Mill/Factory ║ + ║ - Country ║ + ║ - Latitude ║ + ║ - Longitude ║ + ║ - Crushing Capacity (tons/year) ║ + ║ - Annual Sugar Production (tons) ║ + ║ - Province/Region ║ + ║ - Company ║ + ║ - Data Year ║ + ║ ║ + ╚════════════════════════════════════════════════════════════╝ + `); +} diff --git a/webapps/geojson_viewer/index.html b/webapps/geojson_viewer/index.html index 48032be..bd3ecc0 100644 --- a/webapps/geojson_viewer/index.html +++ b/webapps/geojson_viewer/index.html @@ -384,9 +384,9 @@