From f198c050636b405a93a6c0e7a10e860a4b704a4a Mon Sep 17 00:00:00 2001 From: Tomas Horsky Date: Fri, 12 Jun 2026 19:19:20 +0900 Subject: [PATCH] display home country in map --- src/lib/auth/CountryPicker.svelte | 28 +++++------ src/lib/auth/userStore.svelte.js | 9 ++-- src/lib/layout/TopBar.svelte | 10 ++-- src/lib/layout/selection.svelte.js | 6 +++ src/lib/world-map/StatsPanel.svelte | 76 ++++++++++++++++++++++++++++- src/lib/world-map/WorldMap.svelte | 45 ++++++++++++++--- 6 files changed, 140 insertions(+), 34 deletions(-) diff --git a/src/lib/auth/CountryPicker.svelte b/src/lib/auth/CountryPicker.svelte index a58ea24..f4d5aca 100644 --- a/src/lib/auth/CountryPicker.svelte +++ b/src/lib/auth/CountryPicker.svelte @@ -7,36 +7,32 @@ const countries = $derived.by(() => { if (!worldData?.objects?.countries?.geometries) return []; - const names = worldData.objects.countries.geometries - .map(g => g.properties?.name) - .filter(Boolean); - return [...new Set(names)].sort(); + return worldData.objects.countries.geometries + .map(g => ({ name: g.properties?.name, code: g.id })) + .filter(c => c.name && c.code) + .sort((a, b) => a.name.localeCompare(b.name)); }); let search = $state(''); - let selectedCountry = $state(''); + let selectedCountry = $state(null); let filtered = $derived( search - ? countries.filter(c => c.toLowerCase().includes(search.toLowerCase())) + ? countries.filter(c => c.name.toLowerCase().includes(search.toLowerCase())) : countries ); let open = $state(false); - function toggleDropdown() { - open = !open; - } - function select(c) { selectedCountry = c; - search = c; + search = c.name; open = false; } function handleSubmit() { if (selectedCountry) { - setHomeCountry(selectedCountry); + setHomeCountry(selectedCountry.name, selectedCountry.code); } } @@ -61,7 +57,7 @@ placeholder="Search for a country..." bind:value={search} onfocus={() => { open = true; }} - oninput={() => { open = true; selectedCountry = ''; }} + oninput={() => { open = true; selectedCountry = null; }} onkeydown={handleKeydown} class="search-input" /> @@ -70,13 +66,13 @@ {#each filtered as country}
  • select(country)} onkeydown={(e) => { if (e.key === 'Enter') select(country); }} tabindex="0" > - {country} + {country.name}
  • {/each} {#if filtered.length === 0} diff --git a/src/lib/auth/userStore.svelte.js b/src/lib/auth/userStore.svelte.js index 329967b..577e27e 100644 --- a/src/lib/auth/userStore.svelte.js +++ b/src/lib/auth/userStore.svelte.js @@ -27,17 +27,18 @@ export async function signOut() { needsCountry = false; } -export async function setHomeCountry(country) { +export async function setHomeCountry(name, code) { if (!user) return; await setDoc(doc(db, 'users', user.uid), { displayName: user.displayName, photoURL: user.photoURL, email: user.email, - homeCountry: country, - visitedCountries: [], + homeCountry: name, + homeCountryCode: code, + visitedCountries: [code], createdAt: serverTimestamp(), }); - userProfile = { ...userProfile, homeCountry: country, visitedCountries: [] }; + userProfile = { ...userProfile, homeCountry: name, homeCountryCode: code, visitedCountries: [code] }; needsCountry = false; } diff --git a/src/lib/layout/TopBar.svelte b/src/lib/layout/TopBar.svelte index e080f43..132ee86 100644 --- a/src/lib/layout/TopBar.svelte +++ b/src/lib/layout/TopBar.svelte @@ -58,11 +58,11 @@ {/if} - -{#if menuOpen} - -{/if} + {#if menuOpen} + + {/if} +