import { useState, useEffect } from "react"; import { UserTopList, UserTopListItem, Park, Ride, Company } from "@/types/database"; import { supabase } from "@/lib/supabaseClient"; import { Link } from "react-router-dom"; import { Badge } from "@/components/ui/badge"; import { handleError } from "@/lib/errorHandler"; interface ListDisplayProps { list: UserTopList; } interface EnrichedListItem extends UserTopListItem { entity?: Park | Ride | Company; } export function ListDisplay({ list }: ListDisplayProps) { const [items, setItems] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchItemsWithEntities(); }, [list.id]); const fetchItemsWithEntities = async () => { setLoading(true); // First, get the list items const { data: itemsData, error: itemsError } = await supabase .from("user_top_list_items") .select("*") .eq("list_id", list.id) .order("position", { ascending: true }); if (itemsError) { handleError(itemsError, { action: 'Fetch List Items', metadata: { listId: list.id } }); setLoading(false); return; } // Then, fetch the entities for each item const enrichedItems = await Promise.all( (itemsData as UserTopListItem[]).map(async (item) => { let entity: Park | Ride | Company | null = null; if (item.entity_type === "park") { const { data } = await supabase .from("parks") .select("id, name, slug, park_type, location_id") .eq("id", item.entity_id) .single(); 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 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 as Company | null; } return { ...item, entity }; }) ); setItems(enrichedItems as EnrichedListItem[]); setLoading(false); }; const getEntityUrl = (item: EnrichedListItem) => { if (!item.entity) return "#"; const entity = item.entity as { slug?: string }; if (item.entity_type === "park") { return `/parks/${entity.slug}`; } else if (item.entity_type === "ride") { // We need park slug for rides return `/rides/${entity.slug}`; } else if (item.entity_type === "company") { return `/companies/${entity.slug}`; } return "#"; }; if (loading) { return
Loading...
; } if (items.length === 0) { return (
This list is empty. Click "Edit" to add items.
); } return (
    {items.map((item, index) => (
  1. {index + 1}.
    {item.entity ? ( {(item.entity as { name?: string }).name || 'Unknown'} ) : ( [Deleted or unavailable] )}
    {item.entity_type} {item.entity && item.entity_type === "park" && ( {(item.entity as Park).park_type} )} {item.entity && item.entity_type === "ride" && ( {(item.entity as Ride).category} )} {item.entity && item.entity_type === "company" && ( {(item.entity as Company).company_type} )}
    {item.notes && (

    "{item.notes}"

    )}
  2. ))}
); }