From 7b74c2a37d344c9483dd592b2aa6fde927a8700e Mon Sep 17 00:00:00 2001 From: dvirlabs Date: Wed, 25 Mar 2026 11:40:35 +0200 Subject: [PATCH] Fix: Load autocomplete from database instead of hardcoded array --- docker-compose.microservices.yml | 4 +-- frontend/nginx.conf | 3 ++ frontend/public/script.js | 47 ++++++++++++++++++++++---------- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/docker-compose.microservices.yml b/docker-compose.microservices.yml index 383825a..749ead5 100644 --- a/docker-compose.microservices.yml +++ b/docker-compose.microservices.yml @@ -26,7 +26,7 @@ services: build: context: ./backend dockerfile: Dockerfile - image: oramap-backend:latest + image: harbor.dvirlabs.com/my-apps/oramap-backend:latest container_name: oramap-backend environment: - NODE_ENV=production @@ -50,7 +50,7 @@ services: build: context: ./frontend dockerfile: Dockerfile - image: oramap-frontend:latest + image: harbor.dvirlabs.com/my-apps/oramap-frontend:latest container_name: oramap-frontend ports: - "80:80" diff --git a/frontend/nginx.conf b/frontend/nginx.conf index ad0504d..1352e71 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -20,6 +20,9 @@ server { # For Kubernetes: set BACKEND_HOST env var or use service name # For Docker Compose: backend service name is 'backend' location /api/ { + # Docker's embedded DNS server + resolver 127.0.0.11 valid=30s; + # In Kubernetes, this will be: oramap-backend:3000 # In Docker Compose, this will be: backend:3000 # Default to backend:3000 diff --git a/frontend/public/script.js b/frontend/public/script.js index 70c8621..2b9b019 100644 --- a/frontend/public/script.js +++ b/frontend/public/script.js @@ -65,18 +65,31 @@ function clearMarkers() { }); } -const familyNames = [ - "Kafe (קאפח)", "Shiheb (שחב-שבח)", "Eraki (עראקי)", "Salumi (סלומי-שלומי)", - "Afgin (עפג'ין)", "Uzeyri (עזירי-עוזרי)" - // Add more families here if you like - ]; - - // Initialize Fuse.js - const fuse = new Fuse(familyNames, { - includeScore: true, - threshold: 0.4 // Lower = stricter matching - }); - +// Autocomplete data - loaded from database +let familyNames = []; +let fuse; + +// Load families from database for autocomplete +async function loadFamiliesForAutocomplete() { + try { + console.log('📚 Loading families from database for autocomplete...'); + const response = await fetch('/api/families'); + const families = await response.json(); + + // Extract unique family names + familyNames = [...new Set(families.map(f => f.family))]; + console.log('✅ Loaded', familyNames.length, 'family names for autocomplete'); + + // Initialize or update Fuse.js + fuse = new Fuse(familyNames, { + includeScore: true, + threshold: 0.4 // Lower = stricter matching + }); + } catch (error) { + console.error('❌ Failed to load families for autocomplete:', error); + } +} + const searchInput = document.getElementById('searchInput'); const suggestionsBox = document.createElement('div'); suggestionsBox.classList.add('suggestions'); @@ -87,7 +100,7 @@ searchInput.addEventListener('input', () => { const value = searchInput.value.trim(); suggestionsBox.innerHTML = ''; - if (!value) return; + if (!value || !fuse) return; const results = fuse.search(value); @@ -188,6 +201,9 @@ async function addFamily(event) { messageEl.textContent = '✅ Family added successfully!'; messageEl.className = 'form-message success'; + // Reload autocomplete with updated family list + await loadFamiliesForAutocomplete(); + // Add marker to map L.marker([latitude, longitude]).addTo(map) .bindPopup(`${familyName}
City: ${cityName}`) @@ -224,4 +240,7 @@ document.getElementById('searchInput').addEventListener('keypress', (e) => { if (e.key === 'Enter') { searchFamily(); } -}); \ No newline at end of file +}); + +// Load families for autocomplete when page loads +loadFamiliesForAutocomplete(); \ No newline at end of file