Implement strict type enforcement plan

This commit is contained in:
gpt-engineer-app[bot]
2025-10-16 14:10:35 +00:00
parent 3bcd9e03fa
commit bc4a444138
25 changed files with 161 additions and 132 deletions

View File

@@ -228,7 +228,7 @@ export default function OperatorParks() {
<span className="hidden md:inline">Filters</span>
</Button>
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as any)} className="hidden md:inline-flex">
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as 'grid' | 'list')} className="hidden md:inline-flex">
<TabsList>
<TabsTrigger value="grid">
<Grid3X3 className="w-4 h-4" />

View File

@@ -228,7 +228,7 @@ export default function OwnerParks() {
<span className="hidden md:inline">Filters</span>
</Button>
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as any)} className="hidden md:inline-flex">
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as 'grid' | 'list')} className="hidden md:inline-flex">
<TabsList>
<TabsTrigger value="grid">
<Grid3X3 className="w-4 h-4" />

View File

@@ -102,12 +102,12 @@ export default function Parks() {
if (error) throw error;
setParks(data || []);
} catch (error: any) {
} catch (error) {
console.error('Error fetching parks:', error);
toast({
variant: "destructive",
title: "Error loading parks",
description: error.message,
description: error instanceof Error ? error.message : 'Failed to load parks',
});
} finally {
setLoading(false);
@@ -248,10 +248,10 @@ export default function Parks() {
});
setIsAddParkModalOpen(false);
} catch (error: any) {
} catch (error) {
toast({
title: "Submission Failed",
description: error.message || "Failed to submit park.",
description: error instanceof Error ? error.message : "Failed to submit park.",
variant: "destructive"
});
}
@@ -363,7 +363,7 @@ export default function Parks() {
)}
</Button>
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as any)} className="flex-1 sm:flex-none hidden md:inline-flex">
<Tabs value={viewMode} onValueChange={(v) => setViewMode(v as 'grid' | 'list')} className="flex-1 sm:flex-none hidden md:inline-flex">
<TabsList>
<TabsTrigger value="grid">
<Grid3X3 className="w-4 h-4" />

View File

@@ -16,7 +16,7 @@ import { useAuth } from '@/hooks/useAuth';
import { useProfile } from '@/hooks/useProfile';
import { useUsernameValidation } from '@/hooks/useUsernameValidation';
import { User, MapPin, Calendar, Star, Trophy, Settings, Camera, Edit3, Save, X, ArrowLeft, Check, AlertCircle, Loader2, UserX, FileText, Image } from 'lucide-react';
import { Profile as ProfileType } from '@/types/database';
import { Profile as ProfileType, ActivityEntry } from '@/types/database';
import { supabase } from '@/integrations/supabase/client';
import { useToast } from '@/hooks/use-toast';
import { PhotoUpload } from '@/components/upload/PhotoUpload';
@@ -56,7 +56,7 @@ export default function Profile() {
coasterCount: 0,
parkCount: 0
});
const [recentActivity, setRecentActivity] = useState<any[]>([]);
const [recentActivity, setRecentActivity] = useState<ActivityEntry[]>([]);
const [activityLoading, setActivityLoading] = useState(false);
// User role checking
@@ -205,12 +205,12 @@ export default function Profile() {
// Combine and sort by date
const combined = [
...(reviews?.map(r => ({ ...r, type: 'review' })) || []),
...(credits?.map(c => ({ ...c, type: 'credit' })) || []),
...(submissions?.map(s => ({ ...s, type: 'submission' })) || []),
...(rankings?.map(r => ({ ...r, type: 'ranking' })) || [])
...(reviews?.map(r => ({ ...r, type: 'review' as const })) || []),
...(credits?.map(c => ({ ...c, type: 'credit' as const })) || []),
...(submissions?.map(s => ({ ...s, type: 'submission' as const })) || []),
...(rankings?.map(r => ({ ...r, type: 'ranking' as const })) || [])
].sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())
.slice(0, 15);
.slice(0, 15) as ActivityEntry[];
setRecentActivity(combined);
} catch (error: any) {