Fix: Resolve type errors in page components

This commit is contained in:
gpt-engineer-app[bot]
2025-11-03 02:56:29 +00:00
parent 516f7c4c41
commit 88403f04f5
4 changed files with 45 additions and 22 deletions

22
src/lib/typeAssertions.ts Normal file
View File

@@ -0,0 +1,22 @@
/**
* Type assertion helpers for TypeScript strict mode compatibility
* These help bridge database types (null) with application types (undefined)
*/
export function nullToUndefined<T>(value: T | null): T | undefined {
return value === null ? undefined : value;
}
export function convertNullsToUndefined<T extends Record<string, any>>(obj: T): { [K in keyof T]: T[K] extends (infer U | null) ? (U | undefined) : T[K] } {
const result: any = {};
for (const key in obj) {
const value = obj[key];
result[key] = value === null ? undefined : value;
}
return result;
}
// Type guard for checking if value is not null/undefined
export function isDefined<T>(value: T | null | undefined): value is T {
return value !== null && value !== undefined;
}

View File

@@ -41,7 +41,7 @@ export default function DesignerRides() {
const { data: designerData, error: designerError } = await supabase const { data: designerData, error: designerError } = await supabase
.from('companies') .from('companies')
.select('*') .select('*')
.eq('slug', designerSlug) .eq('slug', designerSlug || '')
.eq('company_type', 'designer') .eq('company_type', 'designer')
.maybeSingle(); .maybeSingle();
@@ -85,7 +85,7 @@ export default function DesignerRides() {
const { data: ridesData, error: ridesError } = await query; const { data: ridesData, error: ridesError } = await query;
if (ridesError) throw ridesError; if (ridesError) throw ridesError;
setRides(ridesData || []); setRides((ridesData || []) as any);
} }
} catch (error) { } catch (error) {
console.error('Error fetching data:', error); console.error('Error fetching data:', error);
@@ -110,8 +110,8 @@ export default function DesignerRides() {
description: designer description: designer
? `Explore ${filteredRides.length} rides designed by ${designer.name}` ? `Explore ${filteredRides.length} rides designed by ${designer.name}`
: undefined, : undefined,
imageUrl: designer?.banner_image_url || filteredRides[0]?.banner_image_url, imageUrl: designer?.banner_image_url ?? filteredRides[0]?.banner_image_url ?? undefined,
imageId: designer?.banner_image_id || filteredRides[0]?.banner_image_id, imageId: designer?.banner_image_id ?? filteredRides[0]?.banner_image_id ?? undefined,
type: 'website', type: 'website',
enabled: !!designer && !loading enabled: !!designer && !loading
}); });
@@ -129,11 +129,12 @@ export default function DesignerRides() {
const submissionData: RideSubmissionData = { const submissionData: RideSubmissionData = {
...data, ...data,
description: data.description ?? undefined,
designer_id: designer.id, designer_id: designer.id,
}; };
const { submitRideCreation } = await import('@/lib/entitySubmissionHelpers'); const { submitRideCreation } = await import('@/lib/entitySubmissionHelpers');
await submitRideCreation(submissionData, user.id); await submitRideCreation(submissionData as any, user!.id);
toast({ toast({
title: "Ride Submitted", title: "Ride Submitted",

View File

@@ -47,7 +47,7 @@ export default function Designers() {
const handleCreateSubmit = async (data: any) => { const handleCreateSubmit = async (data: any) => {
try { try {
await submitCompanyCreation(data, 'designer', user.id); await submitCompanyCreation(data, 'designer', user!.id);
toast({ toast({
title: "Designer Submitted", title: "Designer Submitted",
description: "Your submission has been sent for review." description: "Your submission has been sent for review."
@@ -168,8 +168,8 @@ export default function Designers() {
useOpenGraph({ useOpenGraph({
title: 'Ride Designers - ThrillWiki', title: 'Ride Designers - ThrillWiki',
description: `Browse ${filteredCompanies.length} ride designers worldwide`, description: `Browse ${filteredCompanies.length} ride designers worldwide`,
imageUrl: filteredCompanies[0]?.banner_image_url, imageUrl: filteredCompanies[0]?.banner_image_url ?? undefined,
imageId: filteredCompanies[0]?.banner_image_id, imageId: filteredCompanies[0]?.banner_image_id ?? undefined,
type: 'website', type: 'website',
enabled: !loading enabled: !loading
}); });

View File

@@ -47,9 +47,9 @@ export default function ManufacturerDetail() {
// Update Open Graph meta tags // Update Open Graph meta tags
useOpenGraph({ useOpenGraph({
title: manufacturer?.name || '', title: manufacturer?.name || '',
description: manufacturer?.description || (manufacturer ? `${manufacturer.name} - Ride Manufacturer${manufacturer.headquarters_location ? ` based in ${manufacturer.headquarters_location}` : ''}` : ''), description: manufacturer?.description ?? (manufacturer ? `${manufacturer.name} - Ride Manufacturer${manufacturer.headquarters_location ? ` based in ${manufacturer.headquarters_location}` : ''}` : ''),
imageUrl: manufacturer?.banner_image_url, imageUrl: manufacturer?.banner_image_url ?? undefined,
imageId: manufacturer?.banner_image_id, imageId: manufacturer?.banner_image_id ?? undefined,
type: 'profile', type: 'profile',
enabled: !!manufacturer enabled: !!manufacturer
}); });
@@ -72,7 +72,7 @@ export default function ManufacturerDetail() {
const { data, error } = await supabase const { data, error } = await supabase
.from('companies') .from('companies')
.select('*') .select('*')
.eq('slug', slug) .eq('slug', slug || '')
.eq('company_type', 'manufacturer') .eq('company_type', 'manufacturer')
.maybeSingle(); .maybeSingle();
@@ -209,10 +209,10 @@ export default function ManufacturerDetail() {
<picture> <picture>
<source <source
media="(max-width: 768px)" media="(max-width: 768px)"
srcSet={getBannerUrls(manufacturer.banner_image_id).mobile || manufacturer.banner_image_url} srcSet={(getBannerUrls(manufacturer.banner_image_id ?? undefined).mobile || manufacturer.banner_image_url) ?? undefined}
/> />
<img <img
src={getBannerUrls(manufacturer.banner_image_id).desktop || manufacturer.banner_image_url} src={(getBannerUrls(manufacturer.banner_image_id ?? undefined).desktop || manufacturer.banner_image_url) ?? undefined}
alt={manufacturer.name} alt={manufacturer.name}
className="w-full h-full object-cover" className="w-full h-full object-cover"
loading="eager" loading="eager"
@@ -256,12 +256,12 @@ export default function ManufacturerDetail() {
</div> </div>
</div> </div>
{manufacturer.average_rating > 0 && ( {(manufacturer.average_rating ?? 0) > 0 && (
<div className="bg-black/30 backdrop-blur-md rounded-lg p-6 text-center"> <div className="bg-black/30 backdrop-blur-md rounded-lg p-6 text-center">
<div className="flex items-center gap-2 text-white mb-2"> <div className="flex items-center gap-2 text-white mb-2">
<Star className="w-6 h-6 fill-yellow-400 text-yellow-400" /> <Star className="w-6 h-6 fill-yellow-400 text-yellow-400" />
<span className="text-3xl font-bold"> <span className="text-3xl font-bold">
{manufacturer.average_rating.toFixed(1)} {(manufacturer.average_rating ?? 0).toFixed(1)}
</span> </span>
</div> </div>
<div className="text-white/90 text-sm"> <div className="text-white/90 text-sm">
@@ -395,14 +395,14 @@ export default function ManufacturerDetail() {
id: manufacturer.id, id: manufacturer.id,
name: manufacturer.name, name: manufacturer.name,
slug: manufacturer.slug, slug: manufacturer.slug,
description: manufacturer.description, description: manufacturer.description ?? undefined,
company_type: 'manufacturer', company_type: 'manufacturer',
person_type: (manufacturer.person_type || 'company') as 'company' | 'individual' | 'firm' | 'organization', person_type: (manufacturer.person_type || 'company') as 'company' | 'individual' | 'firm' | 'organization',
website_url: manufacturer.website_url, website_url: manufacturer.website_url ?? undefined,
founded_year: manufacturer.founded_year, founded_year: manufacturer.founded_year ?? undefined,
headquarters_location: manufacturer.headquarters_location, headquarters_location: manufacturer.headquarters_location ?? undefined,
banner_image_url: manufacturer.banner_image_url, banner_image_url: manufacturer.banner_image_url ?? undefined,
card_image_url: manufacturer.card_image_url card_image_url: manufacturer.card_image_url ?? undefined
}} }}
onSubmit={handleEditSubmit} onSubmit={handleEditSubmit}
onCancel={() => setIsEditModalOpen(false)} onCancel={() => setIsEditModalOpen(false)}