mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 16:11:12 -05:00
Fix: Resolve remaining TypeScript errors
This commit is contained in:
@@ -197,7 +197,7 @@ export default function AdminDashboard() {
|
||||
onRefresh={handleRefresh}
|
||||
refreshMode={refreshMode}
|
||||
pollInterval={pollInterval}
|
||||
lastUpdated={lastUpdated}
|
||||
lastUpdated={lastUpdated ?? undefined}
|
||||
isRefreshing={isRefreshing}
|
||||
>
|
||||
<div className="space-y-6">
|
||||
|
||||
@@ -37,7 +37,7 @@ export default function AdminModeration() {
|
||||
onRefresh={handleRefresh}
|
||||
refreshMode={refreshMode}
|
||||
pollInterval={pollInterval}
|
||||
lastUpdated={lastUpdated}
|
||||
lastUpdated={lastUpdated ?? undefined}
|
||||
>
|
||||
<div className="space-y-6">
|
||||
<div>
|
||||
@@ -70,7 +70,7 @@ export default function AdminModeration() {
|
||||
onRefresh={handleRefresh}
|
||||
refreshMode={refreshMode}
|
||||
pollInterval={pollInterval}
|
||||
lastUpdated={lastUpdated}
|
||||
lastUpdated={lastUpdated ?? undefined}
|
||||
>
|
||||
<div className="space-y-6">
|
||||
<div>
|
||||
|
||||
@@ -38,7 +38,7 @@ export default function AdminReports() {
|
||||
onRefresh={handleRefresh}
|
||||
refreshMode={refreshMode}
|
||||
pollInterval={pollInterval}
|
||||
lastUpdated={lastUpdated}
|
||||
lastUpdated={lastUpdated ?? undefined}
|
||||
>
|
||||
<div className="space-y-6">
|
||||
<div>
|
||||
@@ -71,7 +71,7 @@ export default function AdminReports() {
|
||||
onRefresh={handleRefresh}
|
||||
refreshMode={refreshMode}
|
||||
pollInterval={pollInterval}
|
||||
lastUpdated={lastUpdated}
|
||||
lastUpdated={lastUpdated ?? undefined}
|
||||
>
|
||||
<div className="space-y-6">
|
||||
<div>
|
||||
|
||||
@@ -147,7 +147,7 @@ export default function Auth() {
|
||||
const { handlePostAuthFlow } = await import('@/lib/authService');
|
||||
const postAuthResult = await handlePostAuthFlow(data.session, 'password');
|
||||
|
||||
if (postAuthResult.success && postAuthResult.data.shouldRedirect) {
|
||||
if (postAuthResult.success && postAuthResult.data?.shouldRedirect) {
|
||||
// Get the TOTP factor ID
|
||||
const { data: factors } = await supabase.auth.mfa.listFactors();
|
||||
const totpFactor = factors?.totp?.find(f => f.status === 'verified');
|
||||
@@ -189,7 +189,7 @@ export default function Auth() {
|
||||
errorMessage = 'Invalid email or password. Please try again.';
|
||||
} else if (errorMsg.includes('Email not confirmed')) {
|
||||
errorMessage = 'Please confirm your email address before signing in.';
|
||||
} else if (error.message.includes('Too many requests')) {
|
||||
} else if (error instanceof Error && error.message.includes('Too many requests')) {
|
||||
errorMessage = 'Too many login attempts. Please wait a few minutes and try again.';
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ export default function BlogIndex() {
|
||||
description: searchQuery
|
||||
? `Search results for "${searchQuery}" in ThrillWiki Blog`
|
||||
: 'News, updates, and stories from the world of theme parks and roller coasters',
|
||||
imageUrl: data?.posts?.[0]?.featured_image_url,
|
||||
imageId: data?.posts?.[0]?.featured_image_id,
|
||||
imageUrl: data?.posts?.[0]?.featured_image_url ?? undefined,
|
||||
imageId: data?.posts?.[0]?.featured_image_id ?? undefined,
|
||||
type: 'website',
|
||||
enabled: !isLoading
|
||||
});
|
||||
@@ -97,14 +97,14 @@ export default function BlogIndex() {
|
||||
slug={post.slug}
|
||||
title={post.title}
|
||||
content={post.content}
|
||||
featuredImageId={post.featured_image_id}
|
||||
featuredImageId={post.featured_image_id ?? undefined}
|
||||
author={{
|
||||
username: post.profiles.username,
|
||||
displayName: post.profiles.display_name,
|
||||
avatarUrl: post.profiles.avatar_url,
|
||||
displayName: post.profiles.display_name ?? undefined,
|
||||
avatarUrl: post.profiles.avatar_url ?? undefined,
|
||||
}}
|
||||
publishedAt={post.published_at!}
|
||||
viewCount={post.view_count}
|
||||
viewCount={post.view_count ?? 0}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@@ -23,7 +23,7 @@ export default function BlogPost() {
|
||||
const query = supabase
|
||||
.from('blog_posts')
|
||||
.select('*, profiles!inner(username, display_name, avatar_url, avatar_image_id)')
|
||||
.eq('slug', slug)
|
||||
.eq('slug', slug || '')
|
||||
.eq('status', 'published')
|
||||
.single();
|
||||
|
||||
@@ -41,8 +41,8 @@ export default function BlogPost() {
|
||||
useOpenGraph({
|
||||
title: post?.title || '',
|
||||
description: post?.content?.substring(0, 160),
|
||||
imageUrl: post?.featured_image_url,
|
||||
imageId: post?.featured_image_id,
|
||||
imageUrl: post?.featured_image_url ?? undefined,
|
||||
imageId: post?.featured_image_id ?? undefined,
|
||||
type: 'article',
|
||||
enabled: !!post
|
||||
});
|
||||
@@ -106,14 +106,14 @@ export default function BlogPost() {
|
||||
<div className="flex items-center justify-between mb-8 pb-6 border-b">
|
||||
<div className="flex items-center gap-3">
|
||||
<Avatar className="w-12 h-12">
|
||||
<AvatarImage src={post.profiles.avatar_url} />
|
||||
<AvatarImage src={post.profiles.avatar_url ?? undefined} />
|
||||
<AvatarFallback>
|
||||
{post.profiles.display_name?.[0] || post.profiles.username[0]}
|
||||
</AvatarFallback>
|
||||
</Avatar>
|
||||
<div>
|
||||
<p className="font-medium">
|
||||
{post.profiles.display_name || post.profiles.username}
|
||||
{post.profiles.display_name ?? post.profiles.username}
|
||||
</p>
|
||||
<div className="flex items-center gap-3 text-sm text-muted-foreground">
|
||||
<div className="flex items-center gap-1">
|
||||
|
||||
@@ -46,9 +46,9 @@ export default function DesignerDetail() {
|
||||
// Update Open Graph meta tags
|
||||
useOpenGraph({
|
||||
title: designer?.name || '',
|
||||
description: designer?.description || (designer ? `${designer.name} - Ride Designer${designer.headquarters_location ? ` based in ${designer.headquarters_location}` : ''}` : ''),
|
||||
imageUrl: designer?.banner_image_url,
|
||||
imageId: designer?.banner_image_id,
|
||||
description: designer?.description ?? (designer ? `${designer.name} - Ride Designer${designer.headquarters_location ? ` based in ${designer.headquarters_location}` : ''}` : ''),
|
||||
imageUrl: designer?.banner_image_url ?? undefined,
|
||||
imageId: designer?.banner_image_id ?? undefined,
|
||||
type: 'profile',
|
||||
enabled: !!designer
|
||||
});
|
||||
@@ -71,7 +71,7 @@ export default function DesignerDetail() {
|
||||
const { data, error } = await supabase
|
||||
.from('companies')
|
||||
.select('*')
|
||||
.eq('slug', slug)
|
||||
.eq('slug', slug || '')
|
||||
.eq('company_type', 'designer')
|
||||
.maybeSingle();
|
||||
|
||||
@@ -197,10 +197,10 @@ export default function DesignerDetail() {
|
||||
<picture>
|
||||
<source
|
||||
media="(max-width: 768px)"
|
||||
srcSet={getBannerUrls(designer.banner_image_id).mobile || designer.banner_image_url}
|
||||
srcSet={(getBannerUrls(designer.banner_image_id ?? undefined).mobile || designer.banner_image_url) ?? undefined}
|
||||
/>
|
||||
<img
|
||||
src={getBannerUrls(designer.banner_image_id).desktop || designer.banner_image_url}
|
||||
src={(getBannerUrls(designer.banner_image_id ?? undefined).desktop || designer.banner_image_url) ?? undefined}
|
||||
alt={designer.name}
|
||||
className="w-full h-full object-cover"
|
||||
loading="eager"
|
||||
@@ -244,12 +244,12 @@ export default function DesignerDetail() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{designer.average_rating > 0 && (
|
||||
{(designer.average_rating ?? 0) > 0 && (
|
||||
<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">
|
||||
<Star className="w-6 h-6 fill-yellow-400 text-yellow-400" />
|
||||
<span className="text-3xl font-bold">
|
||||
{designer.average_rating.toFixed(1)}
|
||||
{(designer.average_rating ?? 0).toFixed(1)}
|
||||
</span>
|
||||
</div>
|
||||
<div className="text-white/90 text-sm">
|
||||
@@ -361,14 +361,14 @@ export default function DesignerDetail() {
|
||||
id: designer.id,
|
||||
name: designer.name,
|
||||
slug: designer.slug,
|
||||
description: designer.description,
|
||||
description: designer.description ?? undefined,
|
||||
company_type: 'designer',
|
||||
person_type: (designer.person_type || 'company') as 'company' | 'individual' | 'firm' | 'organization',
|
||||
website_url: designer.website_url,
|
||||
founded_year: designer.founded_year,
|
||||
headquarters_location: designer.headquarters_location,
|
||||
banner_image_url: designer.banner_image_url,
|
||||
card_image_url: designer.card_image_url
|
||||
website_url: designer.website_url ?? undefined,
|
||||
founded_year: designer.founded_year ?? undefined,
|
||||
headquarters_location: designer.headquarters_location ?? undefined,
|
||||
banner_image_url: designer.banner_image_url ?? undefined,
|
||||
card_image_url: designer.card_image_url ?? undefined
|
||||
}}
|
||||
onSubmit={handleEditSubmit}
|
||||
onCancel={() => setIsEditModalOpen(false)}
|
||||
|
||||
Reference in New Issue
Block a user