{designer.name}
{designer.headquarters_location && (About
{designer.description}
Rides
View all rides designed by {designer.name}
import { useState, useEffect, lazy, Suspense } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Header } from '@/components/layout/Header'; import { getBannerUrls } from '@/lib/cloudflareImageUtils'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Dialog, DialogContent } from '@/components/ui/dialog'; import { AdminFormSkeleton } from '@/components/loading/PageSkeletons'; import { ArrowLeft, MapPin, Star, Globe, Calendar, Edit, Ruler } from 'lucide-react'; import { Company } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; import { DesignerPhotoGallery } from '@/components/companies/DesignerPhotoGallery'; // Lazy load admin form const DesignerForm = lazy(() => import('@/components/admin/DesignerForm').then(m => ({ default: m.DesignerForm }))); import { useAuth } from '@/hooks/useAuth'; import { useUserRole } from '@/hooks/useUserRole'; import { toast } from '@/hooks/use-toast'; import { getErrorMessage } from '@/lib/errorHandler'; import { submitCompanyUpdate } from '@/lib/companyHelpers'; import { VersionIndicator } from '@/components/versioning/VersionIndicator'; import { EntityHistoryTabs } from '@/components/history/EntityHistoryTabs'; import { trackPageView } from '@/lib/viewTracking'; import { useAuthModal } from '@/hooks/useAuthModal'; import { useDocumentTitle } from '@/hooks/useDocumentTitle'; import { useOpenGraph } from '@/hooks/useOpenGraph'; import { useCompanyDetail } from '@/hooks/companies/useCompanyDetail'; import { useCompanyStatistics } from '@/hooks/companies/useCompanyStatistics'; export default function DesignerDetail() { const { slug } = useParams<{ slug: string }>(); const navigate = useNavigate(); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const { user } = useAuth(); const { isModerator } = useUserRole(); const { requireAuth } = useAuthModal(); // Use custom hooks for data fetching const { data: designer, isLoading: loading } = useCompanyDetail(slug, 'designer'); const { data: statistics, isLoading: statsLoading } = useCompanyStatistics(designer?.id, 'designer'); // Update document title when designer changes useDocumentTitle(designer?.name || 'Designer Details'); // 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, type: 'profile', enabled: !!designer }); // Track page view when designer is loaded useEffect(() => { if (designer?.id) { trackPageView('company', designer.id); } }, [designer?.id]); const handleEditSubmit = async (data: any) => { try { await submitCompanyUpdate( designer!.id, data, user!.id ); toast({ title: "Edit Submitted", description: "Your edit has been submitted for review." }); setIsEditModalOpen(false); } catch (error) { const errorMsg = getErrorMessage(error); toast({ title: "Error", description: errorMsg, variant: "destructive" }); } }; if (loading) { return (
{designer.description}
View all rides designed by {designer.name}