'use client'; import React, { useEffect } from 'react'; import { GroupRideSummary } from './types'; interface RideDetailsModalProps { isOpen: boolean; ride: GroupRideSummary | null; onClose: () => void; onEdit?: (ride: GroupRideSummary) => void; onRequestSlot?: (rideId: string) => void; } export function RideDetailsModal({ isOpen, ride, onClose, onEdit, onRequestSlot, }: RideDetailsModalProps) { useEffect(() => { function handleKeyDown(e: KeyboardEvent) { if (e.key === 'Escape') onClose(); } if (isOpen) { document.addEventListener('keydown', handleKeyDown); } return () => document.removeEventListener('keydown', handleKeyDown); }, [isOpen, onClose]); if (!isOpen || !ride) return null; const isFull = ride.participantCount >= ride.participantLimit; const isJoined = ride.userStatus === 'joined' || ride.isOrganizer; return (
{ if (e.target === e.currentTarget) onClose(); }} >
{/* Header */}
sports_motorsports

{ride.title}

{ride.discipline || 'Sport / Canyon'} • {ride.paceClassification}
{/* Status & Code Row */}
Status: {ride.status || 'scheduled'}
{ride.rideCode && (
Code: {ride.rideCode}
)}
{/* Detailed Metadata Grid */}
Date & Time: {ride.scheduledDate} • {ride.scheduledTime}
Region: {ride.region}
Total Distance: {ride.distance}
Formation Profile: {ride.formationProfile}
Rider Roster: {ride.participantCount} / {ride.participantLimit} Riders
Road Captain / Lead: {ride.leadHandle}
{/* Meeting Point */}
Meeting Point & Rally Location
{ride.meetingPoint}
{/* Route Preview Snippet */}
Route Preview Waypoints
{ride.routeSnippet || 'Waypoints synchronized via MotorSignal GNSS Multi-Band Mesh.'}
{/* Description & Safety Briefing */}
Briefing & Safety Protocol

{ride.description}

{/* Footer Actions */}
{ride.isOrganizer && onEdit && ( )} {!ride.isOrganizer && !isJoined && onRequestSlot && !isFull && ( )}
); }