From f6c409fac4b04a5820acb545b2e63ec8a29a6881 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 02:26:28 +0000 Subject: [PATCH] Fix: Resolve internal server error --- src/components/parks/ParkCard.tsx | 8 ++++---- src/components/parks/ParkFilters.tsx | 4 ++-- src/components/parks/ParkListView.tsx | 4 ++-- src/components/privacy/BlockedUsers.tsx | 5 +++-- src/components/profile/RideCreditsManager.tsx | 2 +- src/components/reviews/ReviewForm.tsx | 4 ++-- src/components/rides/RideCard.tsx | 20 +++++++++---------- src/components/rides/RideFilters.tsx | 4 ++-- src/components/rides/RideListView.tsx | 2 +- src/components/rides/SimilarRides.tsx | 6 +++--- src/components/search/SearchResults.tsx | 2 +- src/components/settings/AccountProfileTab.tsx | 8 ++++---- 12 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/components/parks/ParkCard.tsx b/src/components/parks/ParkCard.tsx index 8fcf47de..1cf213e8 100644 --- a/src/components/parks/ParkCard.tsx +++ b/src/components/parks/ParkCard.tsx @@ -62,7 +62,7 @@ export function ParkCard({ park }: ParkCardProps) {
{(park.card_image_url || park.card_image_id) ? (
- {park.ride_count > 0 && ( + {(park.ride_count != null && park.ride_count > 0) && (
{park.ride_count} @@ -120,11 +120,11 @@ export function ParkCard({ park }: ParkCardProps) { )}
- {park.average_rating > 0 && ( + {(park.average_rating != null && park.average_rating > 0) && (
{park.average_rating.toFixed(1)} - {park.review_count > 0 && ( + {(park.review_count != null && park.review_count > 0) && ( ({park.review_count}) )}
diff --git a/src/components/parks/ParkFilters.tsx b/src/components/parks/ParkFilters.tsx index c87f6b09..e63f0e9c 100644 --- a/src/components/parks/ParkFilters.tsx +++ b/src/components/parks/ParkFilters.tsx @@ -65,12 +65,12 @@ export function ParkFilters({ filters, onFiltersChange, parks }: ParkFiltersProp }, [locations]); const stateOptions: MultiSelectOption[] = useMemo(() => { - const states = new Set(locations?.map(l => l.state_province).filter(Boolean) || []); + const states = new Set(locations?.map(l => l.state_province).filter((s): s is string => s != null) || []); return Array.from(states).sort().map(s => ({ label: s, value: s })); }, [locations]); const cityOptions: MultiSelectOption[] = useMemo(() => { - const cities = new Set(locations?.map(l => l.city).filter(Boolean) || []); + const cities = new Set(locations?.map(l => l.city).filter((c): c is string => c != null) || []); return Array.from(cities).sort().map(c => ({ label: c, value: c })); }, [locations]); diff --git a/src/components/parks/ParkListView.tsx b/src/components/parks/ParkListView.tsx index 4de613cf..2d2ecdb5 100644 --- a/src/components/parks/ParkListView.tsx +++ b/src/components/parks/ParkListView.tsx @@ -106,7 +106,7 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) {
{/* Rating */} - {park.average_rating > 0 && ( + {(park.average_rating != null && park.average_rating > 0) && (
{park.average_rating.toFixed(1)} @@ -149,7 +149,7 @@ export function ParkListView({ parks, onParkClick }: ParkListViewProps) { {park.coaster_count || 0} coasters
- {park.review_count > 0 && ( + {(park.review_count != null && park.review_count > 0) && (
{park.review_count} reviews diff --git a/src/components/privacy/BlockedUsers.tsx b/src/components/privacy/BlockedUsers.tsx index 2a2ddd16..eea347a5 100644 --- a/src/components/privacy/BlockedUsers.tsx +++ b/src/components/privacy/BlockedUsers.tsx @@ -67,10 +67,11 @@ export function BlockedUsers() { const blockedUsersWithProfiles = blocks.map(block => ({ ...block, blocker_id: user.id, - blocked_profile: profiles?.find(p => p.user_id === block.blocked_id) + blocked_profile: profiles?.find(p => p.user_id === block.blocked_id), + reason: block.reason || undefined })); - setBlockedUsers(blockedUsersWithProfiles); + setBlockedUsers(blockedUsersWithProfiles as UserBlock[]); logger.info('Blocked users fetched successfully', { userId: user.id, diff --git a/src/components/profile/RideCreditsManager.tsx b/src/components/profile/RideCreditsManager.tsx index 71e16ef2..fad6dd9e 100644 --- a/src/components/profile/RideCreditsManager.tsx +++ b/src/components/profile/RideCreditsManager.tsx @@ -134,7 +134,7 @@ export function RideCreditsManager({ userId }: RideCreditsManagerProps) { }); } - setCredits(processedData); + setCredits(processedData as UserRideCredit[]); } catch (error: unknown) { handleError(error, { action: 'Fetch Ride Credits', diff --git a/src/components/reviews/ReviewForm.tsx b/src/components/reviews/ReviewForm.tsx index 1e5e38aa..87922a06 100644 --- a/src/components/reviews/ReviewForm.tsx +++ b/src/components/reviews/ReviewForm.tsx @@ -176,8 +176,8 @@ export function ReviewForm({
setValue('visit_date', date ? toDateOnly(date) : undefined)} + date={watch('visit_date') ? parseDateOnly(watch('visit_date') || '') : undefined} + onSelect={(date) => setValue('visit_date', date ? toDateOnly(date) : '')} placeholder="When did you visit?" disableFuture={true} fromYear={1950} diff --git a/src/components/rides/RideCard.tsx b/src/components/rides/RideCard.tsx index 78209d06..8404b74d 100644 --- a/src/components/rides/RideCard.tsx +++ b/src/components/rides/RideCard.tsx @@ -67,7 +67,7 @@ export function RideCard({ ride, showParkName = true, className, parkSlug }: Rid
{(ride.card_image_url || ride.card_image_id || ride.image_url) ? ( {/* Stats Row */} - {(Number(ride.max_speed_kmh) > 0 || Number(ride.max_height_meters) > 0 || Number(ride.duration_seconds) > 0) && ( + {(Number(ride.max_speed_kmh || 0) > 0 || Number(ride.max_height_meters || 0) > 0 || Number(ride.duration_seconds || 0) > 0) && (
- {Number(ride.max_speed_kmh) > 0 && ( + {Number(ride.max_speed_kmh || 0) > 0 && (
- +
)} - {Number(ride.max_height_meters) > 0 && ( + {Number(ride.max_height_meters || 0) > 0 && (
- +
)} - {Number(ride.duration_seconds) > 0 && ( + {Number(ride.duration_seconds || 0) > 0 && (
- {Math.floor(ride.duration_seconds / 60)}min + {Math.floor((ride.duration_seconds || 0) / 60)}min
)} @@ -152,11 +152,11 @@ export function RideCard({ ride, showParkName = true, className, parkSlug }: Rid )} {/* Rating */} - {ride.average_rating > 0 && ( + {(ride.average_rating != null && ride.average_rating > 0) && (
{ride.average_rating.toFixed(1)} - {ride.review_count > 0 && ( + {(ride.review_count != null && ride.review_count > 0) && ( ({ride.review_count}) )}
diff --git a/src/components/rides/RideFilters.tsx b/src/components/rides/RideFilters.tsx index 65bfccf9..5820e759 100644 --- a/src/components/rides/RideFilters.tsx +++ b/src/components/rides/RideFilters.tsx @@ -145,12 +145,12 @@ export function RideFilters({ filters, onFiltersChange, rides }: RideFiltersProp }, [locations]); const stateOptions: MultiSelectOption[] = useMemo(() => { - const states = new Set(locations?.map(l => l.state_province).filter(Boolean) || []); + const states = new Set(locations?.map(l => l.state_province).filter((s): s is string => s != null) || []); return Array.from(states).sort().map(s => ({ label: s, value: s })); }, [locations]); const cityOptions: MultiSelectOption[] = useMemo(() => { - const cities = new Set(locations?.map(l => l.city).filter(Boolean) || []); + const cities = new Set(locations?.map(l => l.city).filter((c): c is string => c != null) || []); return Array.from(cities).sort().map(c => ({ label: c, value: c })); }, [locations]); diff --git a/src/components/rides/RideListView.tsx b/src/components/rides/RideListView.tsx index dba8bb3c..9a659c41 100644 --- a/src/components/rides/RideListView.tsx +++ b/src/components/rides/RideListView.tsx @@ -101,7 +101,7 @@ export function RideListView({ rides, onRideClick }: RideListViewProps) {
{/* Rating */} - {ride.average_rating > 0 && ( + {(ride.average_rating != null && ride.average_rating > 0) && (
{ride.average_rating.toFixed(1)} diff --git a/src/components/rides/SimilarRides.tsx b/src/components/rides/SimilarRides.tsx index c5a92bf2..f2f98d94 100644 --- a/src/components/rides/SimilarRides.tsx +++ b/src/components/rides/SimilarRides.tsx @@ -17,14 +17,14 @@ interface SimilarRide { name: string; slug: string; image_url: string | null; - average_rating: number; + average_rating: number | null; status: string; category: string; description: string | null; max_speed_kmh: number | null; max_height_meters: number | null; duration_seconds: number | null; - review_count: number; + review_count: number | null; park: { name: string; slug: string; @@ -61,7 +61,7 @@ export function SimilarRides({ currentRideId, parkId, parkSlug, category }: Simi .limit(4); if (!error && data) { - setRides(data); + setRides(data as SimilarRide[]); } setLoading(false); } diff --git a/src/components/search/SearchResults.tsx b/src/components/search/SearchResults.tsx index 9f29bbe8..93bdae99 100644 --- a/src/components/search/SearchResults.tsx +++ b/src/components/search/SearchResults.tsx @@ -102,7 +102,7 @@ export function SearchResults({ query, onClose }: SearchResultsProps) { const getResultRating = (result: SearchResult) => { if (result.type === 'park' || result.type === 'ride') { const data = result.data as Park | Ride; - return data.average_rating > 0 ? data.average_rating : null; + return (data.average_rating != null && data.average_rating > 0) ? data.average_rating : null; } return null; }; diff --git a/src/components/settings/AccountProfileTab.tsx b/src/components/settings/AccountProfileTab.tsx index cc16f5f6..e3174e36 100644 --- a/src/components/settings/AccountProfileTab.tsx +++ b/src/components/settings/AccountProfileTab.tsx @@ -97,7 +97,7 @@ export function AccountProfileTab() { .maybeSingle(); if (!error && data) { - setDeletionRequest(data); + setDeletionRequest(data as AccountDeletionRequest); } }; @@ -112,8 +112,8 @@ export function AccountProfileTab() { // Use the update_profile RPC function with server-side validation const { data: result, error } = await supabase.rpc('update_profile', { p_username: data.username, - p_display_name: data.display_name || null, - p_bio: data.bio || null + p_display_name: data.display_name || '', + p_bio: data.bio || '' }); if (error) { @@ -219,7 +219,7 @@ export function AccountProfileTab() { .maybeSingle(); if (!error && data) { - setDeletionRequest(data); + setDeletionRequest(data as AccountDeletionRequest); } };