import { useState, useEffect } from 'react' import { listCoasters, deleteCoaster } from '../api/coaster' import type { SavedCoaster } from '../types/api' import styles from './CoasterListPanel.module.css' interface Props { challengeId: string currentUsername: string | undefined onLoad: (coaster: SavedCoaster) => void refreshKey: number /** Render as a top-bar dropdown instead of a sidebar panel */ menuMode?: boolean } export function CoasterListPanel({ challengeId, currentUsername, onLoad, refreshKey, menuMode }: Props) { const [open, setOpen] = useState(false) const [coasters, setCoasters] = useState([]) useEffect(() => { listCoasters(challengeId).then(setCoasters).catch(console.error) }, [challengeId, refreshKey]) async function handleDelete(id: string) { await deleteCoaster(id) setCoasters(prev => prev.filter(c => c.id !== id)) } if (menuMode) { return (
{open && (
{coasters.length === 0 ? (

No coasters yet.

) : ( coasters.map(c => { const isOwn = c.creator_username === currentUsername return (
{c.name || 'Unnamed coaster'} @{c.creator_username}
{isOwn && ( )}
) }) )}
)}
) } return (
{open && (
{coasters.length === 0 ? (

No coasters yet.

) : ( coasters.map(c => { const isOwn = c.creator_username === currentUsername return (
{c.name || 'Unnamed coaster'} @{c.creator_username}
{isOwn && ( )}
) }) )}
)}
) }