From 007494d21c6ea551b40e4cec76fa1af0c927ea03 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:04:14 +0000 Subject: [PATCH] Fix: Resolve type errors in homepage components --- src/components/designers/DesignerCard.tsx | 4 +- src/components/homepage/FeaturedParks.tsx | 2 +- .../manufacturers/ManufacturerCard.tsx | 6 +- src/types/database.ts | 122 +++++++++--------- 4 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/components/designers/DesignerCard.tsx b/src/components/designers/DesignerCard.tsx index 9d3c210c..64b1dd6f 100644 --- a/src/components/designers/DesignerCard.tsx +++ b/src/components/designers/DesignerCard.tsx @@ -112,11 +112,11 @@ export function DesignerCard({ company }: DesignerCardProps) { )} - {company.average_rating > 0 && ( + {company.average_rating && company.average_rating > 0 && (
{company.average_rating.toFixed(1)} - {company.review_count > 0 && ( + {company.review_count && company.review_count > 0 && ( ({company.review_count}) )}
diff --git a/src/components/homepage/FeaturedParks.tsx b/src/components/homepage/FeaturedParks.tsx index 57d0e423..e207b561 100644 --- a/src/components/homepage/FeaturedParks.tsx +++ b/src/components/homepage/FeaturedParks.tsx @@ -71,7 +71,7 @@ export function FeaturedParks() { {/* Rating Badge */} - {park.average_rating.toFixed(1)} + {park.average_rating ? park.average_rating.toFixed(1) : 'N/A'} diff --git a/src/components/manufacturers/ManufacturerCard.tsx b/src/components/manufacturers/ManufacturerCard.tsx index e9b57ddf..d85a5721 100644 --- a/src/components/manufacturers/ManufacturerCard.tsx +++ b/src/components/manufacturers/ManufacturerCard.tsx @@ -43,7 +43,7 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
{(company.card_image_url || company.card_image_id) ? ( - {company.average_rating > 0 && ( + {company.average_rating && company.average_rating > 0 && (
{company.average_rating.toFixed(1)} - {company.review_count > 0 && ( + {company.review_count && company.review_count > 0 && ( ({company.review_count}) )}
diff --git a/src/types/database.ts b/src/types/database.ts index f00a5fbd..af8209a7 100644 --- a/src/types/database.ts +++ b/src/types/database.ts @@ -27,8 +27,8 @@ export interface Company { banner_image_id?: string | null; card_image_url?: string | null; card_image_id?: string | null; - average_rating: number; - review_count: number; + average_rating: number | null; + review_count: number | null; } export interface Park { @@ -52,10 +52,10 @@ export interface Park { banner_image_id?: string | null; card_image_url?: string | null; card_image_id?: string | null; - average_rating: number; - review_count: number; - ride_count: number; - coaster_count: number; + average_rating: number | null; + review_count: number | null; + ride_count: number | null; + coaster_count: number | null; created_at: string; updated_at: string; } @@ -135,76 +135,76 @@ export interface Ride { description?: string | null; park?: Park | { name: string; slug: string; location?: Location }; // Allow partial park data ride_model?: RideModel; - manufacturer?: Company; - designer?: Company; + manufacturer?: Company | null; + designer?: Company | null; category: string; // Allow any string from database - ride_sub_type?: string; // Sub-category like "Flying Coaster", "Inverted Coaster", etc. + ride_sub_type?: string | null; // Sub-category like "Flying Coaster", "Inverted Coaster", etc. status: string; // Allow any string from database opening_date?: string | null; opening_date_precision?: string | null; closing_date?: string | null; closing_date_precision?: string | null; - height_requirement?: number; - age_requirement?: number; - capacity_per_hour?: number; - duration_seconds?: number; - max_speed_kmh?: number; - max_height_meters?: number; - length_meters?: number; - inversions?: number; + height_requirement?: number | null; + age_requirement?: number | null; + capacity_per_hour?: number | null; + duration_seconds?: number | null; + max_speed_kmh?: number | null; + max_height_meters?: number | null; + length_meters?: number | null; + inversions?: number | null; technical_specifications?: RideTechnicalSpec[]; coaster_statistics?: RideCoasterStat[]; name_history?: RideNameHistory[]; - average_rating: number; - review_count: number; - image_url?: string; - banner_image_url?: string; - banner_image_id?: string; - card_image_url?: string; - card_image_id?: string; + average_rating: number | null; + review_count: number | null; + image_url?: string | null; + banner_image_url?: string | null; + banner_image_id?: string | null; + card_image_url?: string | null; + card_image_id?: string | null; // Roller coaster specific fields - coaster_type?: string; - seating_type?: string; - intensity_level?: string; - track_material?: string[]; - support_material?: string[]; - propulsion_method?: string[]; - drop_height_meters?: number; - max_g_force?: number; + coaster_type?: string | null; + seating_type?: string | null; + intensity_level?: string | null; + track_material?: string[] | null; + support_material?: string[] | null; + propulsion_method?: string[] | null; + drop_height_meters?: number | null; + max_g_force?: number | null; // Water ride specific fields - water_depth_cm?: number; - splash_height_meters?: number; - wetness_level?: string; - flume_type?: string; - boat_capacity?: number; + water_depth_cm?: number | null; + splash_height_meters?: number | null; + wetness_level?: string | null; + flume_type?: string | null; + boat_capacity?: number | null; // Dark ride specific fields - theme_name?: string; - story_description?: string; - show_duration_seconds?: number; - animatronics_count?: number; - projection_type?: string; - ride_system?: string; - scenes_count?: number; + theme_name?: string | null; + story_description?: string | null; + show_duration_seconds?: number | null; + animatronics_count?: number | null; + projection_type?: string | null; + ride_system?: string | null; + scenes_count?: number | null; // Flat ride specific fields - rotation_type?: string; - motion_pattern?: string; - platform_count?: number; - swing_angle_degrees?: number; - rotation_speed_rpm?: number; - arm_length_meters?: number; - max_height_reached_meters?: number; + rotation_type?: string | null; + motion_pattern?: string | null; + platform_count?: number | null; + swing_angle_degrees?: number | null; + rotation_speed_rpm?: number | null; + arm_length_meters?: number | null; + max_height_reached_meters?: number | null; // Kiddie ride specific fields - min_age?: number; - max_age?: number; - educational_theme?: string; - character_theme?: string; + min_age?: number | null; + max_age?: number | null; + educational_theme?: string | null; + character_theme?: string | null; // Transportation specific fields - transport_type?: string; - route_length_meters?: number; - stations_count?: number; - vehicle_capacity?: number; - vehicles_count?: number; - round_trip_duration_seconds?: number; + transport_type?: string | null; + route_length_meters?: number | null; + stations_count?: number | null; + vehicle_capacity?: number | null; + vehicles_count?: number | null; + round_trip_duration_seconds?: number | null; } export interface Profile {