diff --git a/src/components/admin/ManufacturerForm.tsx b/src/components/admin/ManufacturerForm.tsx index 0ffe469f..3da8f99f 100644 --- a/src/components/admin/ManufacturerForm.tsx +++ b/src/components/admin/ManufacturerForm.tsx @@ -170,7 +170,11 @@ export function ManufacturerForm({ onSubmit, onCancel, initialData }: Manufactur })()} precision={(watch('founded_date_precision') as DatePrecision) || 'year'} onChange={(date, precision) => { - setValue('founded_date', date ? toDateOnly(date) : undefined); + if (date && typeof date === 'string') { + setValue('founded_date', toDateOnly(date) as any); + } else { + setValue('founded_date', null as any); + } setValue('founded_date_precision', precision); }} label="Founded Date" diff --git a/src/components/homepage/RecentChangeCard.tsx b/src/components/homepage/RecentChangeCard.tsx index 0e6de9a6..7415373d 100644 --- a/src/components/homepage/RecentChangeCard.tsx +++ b/src/components/homepage/RecentChangeCard.tsx @@ -116,7 +116,7 @@ export function RecentChangeCard({ {changedByUsername && (
- + diff --git a/src/components/lists/ListDisplay.tsx b/src/components/lists/ListDisplay.tsx index c77555a6..0f3a29ca 100644 --- a/src/components/lists/ListDisplay.tsx +++ b/src/components/lists/ListDisplay.tsx @@ -39,7 +39,7 @@ export function ListDisplay({ list }: ListDisplayProps) { // Then, fetch the entities for each item const enrichedItems = await Promise.all( (itemsData as UserTopListItem[]).map(async (item) => { - let entity = null; + let entity: Park | Ride | Company | null = null; if (item.entity_type === "park") { const { data } = await supabase @@ -47,28 +47,28 @@ export function ListDisplay({ list }: ListDisplayProps) { .select("id, name, slug, park_type, location_id") .eq("id", item.entity_id) .single(); - entity = data; + entity = data as Park | null; } else if (item.entity_type === "ride") { const { data } = await supabase .from("rides") .select("id, name, slug, category, park_id") .eq("id", item.entity_id) .single(); - entity = data; + entity = data as Ride | null; } else if (item.entity_type === "company") { const { data } = await supabase .from("companies") .select("id, name, slug, company_type") .eq("id", item.entity_id) .single(); - entity = data; + entity = data as Company | null; } return { ...item, entity }; }) ); - setItems(enrichedItems); + setItems(enrichedItems as EnrichedListItem[]); setLoading(false); }; diff --git a/src/types/database.ts b/src/types/database.ts index 332505a9..f00a5fbd 100644 --- a/src/types/database.ts +++ b/src/types/database.ts @@ -2,31 +2,31 @@ export interface Location { id: string; name: string; country: string; - state_province?: string; - city?: string; - postal_code?: string; - latitude?: number; - longitude?: number; - timezone?: string; + state_province?: string | null; + city?: string | null; + postal_code?: string | null; + latitude?: number | null; + longitude?: number | null; + timezone?: string | null; } export interface Company { id: string; name: string; slug: string; - description?: string; + description?: string | null; company_type: string; // Allow any string from database - person_type?: string; // Database returns string, validated at form level - website_url?: string; - founded_year?: number; // Legacy field - founded_date?: string; - founded_date_precision?: string; - headquarters_location?: string; - logo_url?: string; - banner_image_url?: string; - banner_image_id?: string; - card_image_url?: string; - card_image_id?: string; + person_type?: string | null; // Database returns string, validated at form level + website_url?: string | null; + founded_year?: number | null; // Legacy field + founded_date?: string | null; + founded_date_precision?: string | null; + headquarters_location?: string | null; + logo_url?: string | null; + banner_image_url?: string | null; + banner_image_id?: string | null; + card_image_url?: string | null; + card_image_id?: string | null; average_rating: number; review_count: number; } @@ -42,16 +42,16 @@ export interface Park { opening_date_precision?: string | null; closing_date?: string | null; closing_date_precision?: string | null; - website_url?: string; - phone?: string; - email?: string; - location?: Location; - operator?: Company; - property_owner?: Company; - banner_image_url?: string; - banner_image_id?: string; - card_image_url?: string; - card_image_id?: string; + website_url?: string | null; + phone?: string | null; + email?: string | null; + location?: Location | null; + operator?: Company | null; + property_owner?: Company | null; + banner_image_url?: string | null; + banner_image_id?: string | null; + card_image_url?: string | null; + card_image_id?: string | null; average_rating: number; review_count: number; ride_count: number;