import { useState, useEffect } from "react"; import { UserTopList, UserTopListItem, Park, Ride, Company } from "@/types/database"; import { supabase } from "@/integrations/supabase/client"; import { Link } from "react-router-dom"; import { Badge } from "@/components/ui/badge"; 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) { console.error("Error fetching items:", itemsError); setLoading(false); return; } // Then, fetch the entities for each item const enrichedItems = await Promise.all( (itemsData as UserTopListItem[]).map(async (item) => { let entity = 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; } 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; } 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; } return { ...item, entity }; }) ); setItems(enrichedItems); setLoading(false); }; const getEntityUrl = (item: EnrichedListItem) => { if (!item.entity) return "#"; const entity = item.entity as any; 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 any).name} ) : ( [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. ))}
); }