From 6a46b1c14a6e1abf8a6d5463ec43136b62028f26 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 28 Sep 2025 20:54:16 +0000 Subject: [PATCH] Add location field to profile --- .../profile/PersonalLocationDisplay.tsx | 52 +++++++++++++++++++ src/pages/Profile.tsx | 4 ++ src/types/database.ts | 1 + 3 files changed, 57 insertions(+) create mode 100644 src/components/profile/PersonalLocationDisplay.tsx diff --git a/src/components/profile/PersonalLocationDisplay.tsx b/src/components/profile/PersonalLocationDisplay.tsx new file mode 100644 index 00000000..2a1467ea --- /dev/null +++ b/src/components/profile/PersonalLocationDisplay.tsx @@ -0,0 +1,52 @@ +import { useState, useEffect } from 'react'; +import { MapPin } from 'lucide-react'; +import { supabase } from '@/integrations/supabase/client'; + +interface PersonalLocationDisplayProps { + personalLocation: string; + userId: string; + isOwnProfile: boolean; +} + +export function PersonalLocationDisplay({ personalLocation, userId, isOwnProfile }: PersonalLocationDisplayProps) { + const [showLocation, setShowLocation] = useState(false); + + useEffect(() => { + fetchLocationPrivacy(); + }, [userId, isOwnProfile]); + + const fetchLocationPrivacy = async () => { + // Always show location for own profile + if (isOwnProfile) { + setShowLocation(true); + return; + } + + try { + const { data } = await supabase + .from('user_preferences') + .select('privacy_settings') + .eq('user_id', userId) + .maybeSingle(); + + if (data?.privacy_settings) { + const settings = data.privacy_settings as any; + setShowLocation(settings.show_location || false); + } + } catch (error) { + console.error('Error fetching location privacy:', error); + setShowLocation(false); + } + }; + + if (!showLocation || !personalLocation) { + return null; + } + + return ( +
+ + {personalLocation} +
+ ); +} \ No newline at end of file diff --git a/src/pages/Profile.tsx b/src/pages/Profile.tsx index 292fdfff..b5edcbcd 100644 --- a/src/pages/Profile.tsx +++ b/src/pages/Profile.tsx @@ -21,6 +21,7 @@ import { PhotoUpload } from '@/components/upload/PhotoUpload'; import { profileEditSchema } from '@/lib/validation'; import { LocationDisplay } from '@/components/profile/LocationDisplay'; import { UserBlockButton } from '@/components/profile/UserBlockButton'; +import { PersonalLocationDisplay } from '@/components/profile/PersonalLocationDisplay'; export default function Profile() { const { username @@ -394,6 +395,9 @@ export default function Profile() { {/* Show location only if privacy allows */} {profile.location && } + + {/* Show personal location if available and privacy allows */} + {profile.personal_location && } } diff --git a/src/types/database.ts b/src/types/database.ts index 74e38571..95900805 100644 --- a/src/types/database.ts +++ b/src/types/database.ts @@ -104,6 +104,7 @@ export interface Profile { preferred_language?: string; location?: Location; location_id?: string; + personal_location?: string; date_of_birth?: string; privacy_level: 'public' | 'friends' | 'private'; theme_preference: 'light' | 'dark' | 'system';