Fix: Resolve type errors in homepage components

This commit is contained in:
gpt-engineer-app[bot]
2025-11-03 02:04:14 +00:00
parent c4b1339f0d
commit 007494d21c
4 changed files with 67 additions and 67 deletions

View File

@@ -112,11 +112,11 @@ export function DesignerCard({ company }: DesignerCardProps) {
)}
</div>
{company.average_rating > 0 && (
{company.average_rating && company.average_rating > 0 && (
<div className="inline-flex items-center gap-1">
<Star className="w-4 h-4 fill-yellow-500 text-yellow-500" />
<span className="font-semibold">{company.average_rating.toFixed(1)}</span>
{company.review_count > 0 && (
{company.review_count && company.review_count > 0 && (
<span className="text-muted-foreground">({company.review_count})</span>
)}
</div>

View File

@@ -71,7 +71,7 @@ export function FeaturedParks() {
{/* Rating Badge */}
<Badge className="absolute top-3 right-3 bg-background/90 text-foreground border-0">
<Star className="w-3 h-3 mr-1 fill-yellow-400 text-yellow-400" />
{park.average_rating.toFixed(1)}
{park.average_rating ? park.average_rating.toFixed(1) : 'N/A'}
</Badge>
</div>

View File

@@ -43,7 +43,7 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
<div className="aspect-[3/2] relative bg-gradient-to-br from-primary/20 via-primary/10 to-transparent overflow-hidden">
{(company.card_image_url || company.card_image_id) ? (
<img
src={company.card_image_url || getCloudflareImageUrl(company.card_image_id, 'card')}
src={company.card_image_url || (company.card_image_id ? getCloudflareImageUrl(company.card_image_id, 'card') : undefined)}
srcSet={company.card_image_id ? `
${getCloudflareImageUrl(company.card_image_id, 'cardthumb')} 600w,
${getCloudflareImageUrl(company.card_image_id, 'card')} 1200w
@@ -143,11 +143,11 @@ export function ManufacturerCard({ company }: ManufacturerCardProps) {
)}
</div>
{company.average_rating > 0 && (
{company.average_rating && company.average_rating > 0 && (
<div className="inline-flex items-center gap-1">
<Star className="w-4 h-4 fill-yellow-500 text-yellow-500" />
<span className="font-semibold">{company.average_rating.toFixed(1)}</span>
{company.review_count > 0 && (
{company.review_count && company.review_count > 0 && (
<span className="text-muted-foreground">({company.review_count})</span>
)}
</div>

View File

@@ -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 {