diff --git a/backend/server/adventures/views/reverse_geocode_view.py b/backend/server/adventures/views/reverse_geocode_view.py index e7c4562..d876787 100644 --- a/backend/server/adventures/views/reverse_geocode_view.py +++ b/backend/server/adventures/views/reverse_geocode_view.py @@ -7,6 +7,7 @@ from adventures.models import Adventure from adventures.serializers import AdventureSerializer import requests from adventures.geocoding import reverse_geocode +from adventures.geocoding import extractIsoCode class ReverseGeocodeViewSet(viewsets.ViewSet): permission_classes = [IsAuthenticated] @@ -49,7 +50,7 @@ class ReverseGeocodeViewSet(viewsets.ViewSet): data = response.json() except requests.exceptions.JSONDecodeError: return Response({"error": "Invalid response from geocoding service"}, status=400) - extracted_region = self.extractIsoCode(data) + extracted_region = extractIsoCode(self.request.user,data) if 'error' not in extracted_region: region = Region.objects.filter(id=extracted_region['region_id']).first() visited_region = VisitedRegion.objects.filter(region=region, user_id=self.request.user).first() diff --git a/frontend/src/routes/settings/+page.svelte b/frontend/src/routes/settings/+page.svelte index 1ca20db..2063a36 100644 --- a/frontend/src/routes/settings/+page.svelte +++ b/frontend/src/routes/settings/+page.svelte @@ -7,7 +7,7 @@ import { browser } from '$app/environment'; import { t } from 'svelte-i18n'; import TotpModal from '$lib/components/TOTPModal.svelte'; - import { appTitle, appVersion } from '$lib/config.js'; + import { appTitle, appVersion, copyrightYear } from '$lib/config.js'; import ImmichLogo from '$lib/assets/immich.svg'; export let data; @@ -20,10 +20,10 @@ } let new_password_disable_setting: boolean = false; - let new_email: string = ''; let public_url: string = data.props.publicUrl; let immichIntegration = data.props.immichIntegration; + let activeSection: string = 'profile'; let newImmichIntegration: ImmichIntegration = { server_url: '', @@ -33,6 +33,15 @@ let isMFAModalOpen: boolean = false; + const sections = [ + { id: 'profile', icon: '👤', label: 'Profile' }, + { id: 'security', icon: '🔒', label: 'Security' }, + { id: 'emails', icon: '📧', label: 'Emails' }, + { id: 'integrations', icon: '🔗', label: 'Integrations' }, + { id: 'admin', icon: '⚙️', label: 'Admin' }, + { id: 'advanced', icon: '🛠️', label: 'Advanced' } + ]; + onMount(async () => { if (browser) { const queryParams = new URLSearchParams($page.url.search); @@ -162,7 +171,6 @@ }); if (res.ok) { addToast('success', $t('settings.email_set_primary')); - // remove primary from all other emails and set this one as primary emails = emails.map((e) => { if (e.email === email.email) { e.primary = true; @@ -248,415 +256,777 @@ /> {/if} -