mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 17:11:13 -05:00
87 lines
2.5 KiB
TypeScript
87 lines
2.5 KiB
TypeScript
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
|
import { Badge } from '@/components/ui/badge';
|
|
import { Zap, TrendingUp, Award, Sparkles } from 'lucide-react';
|
|
import { MeasurementDisplay } from '@/components/ui/measurement-display';
|
|
|
|
interface RideHighlight {
|
|
icon: React.ReactNode;
|
|
label: string;
|
|
value: React.ReactNode;
|
|
}
|
|
|
|
interface RideWithStats {
|
|
id: string;
|
|
name: string;
|
|
max_speed_kmh?: number;
|
|
max_height_meters?: number;
|
|
inversions?: number;
|
|
average_rating?: number;
|
|
}
|
|
|
|
interface RideHighlightsProps {
|
|
ride: RideWithStats;
|
|
}
|
|
|
|
export function RideHighlights({ ride }: RideHighlightsProps) {
|
|
const highlights: RideHighlight[] = [];
|
|
|
|
// Add speed highlight if notable
|
|
if (ride.max_speed_kmh && ride.max_speed_kmh > 60) {
|
|
highlights.push({
|
|
icon: <Zap className="w-5 h-5 text-amber-500" />,
|
|
label: 'High Speed',
|
|
value: <MeasurementDisplay value={ride.max_speed_kmh} type="speed" className="inline" />
|
|
});
|
|
}
|
|
|
|
// Add height highlight if notable
|
|
if (ride.max_height_meters && ride.max_height_meters > 30) {
|
|
highlights.push({
|
|
icon: <TrendingUp className="w-5 h-5 text-blue-500" />,
|
|
label: 'Tall Structure',
|
|
value: <MeasurementDisplay value={ride.max_height_meters} type="height" className="inline" />
|
|
});
|
|
}
|
|
|
|
// Add inversions highlight
|
|
if (ride.inversions && ride.inversions > 0) {
|
|
highlights.push({
|
|
icon: <Sparkles className="w-5 h-5 text-purple-500" />,
|
|
label: 'Inversions',
|
|
value: `${ride.inversions} ${ride.inversions === 1 ? 'inversion' : 'inversions'}`
|
|
});
|
|
}
|
|
|
|
// Add rating highlight if high
|
|
if (ride.average_rating && ride.average_rating >= 4.0) {
|
|
highlights.push({
|
|
icon: <Award className="w-5 h-5 text-yellow-500" />,
|
|
label: 'Highly Rated',
|
|
value: `${ride.average_rating.toFixed(1)} stars`
|
|
});
|
|
}
|
|
|
|
if (highlights.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<Card>
|
|
<CardHeader>
|
|
<CardTitle>Ride Highlights</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
{highlights.map((highlight, index) => (
|
|
<div key={index} className="flex flex-col items-center text-center p-4 rounded-lg bg-accent/50">
|
|
<div className="mb-2">{highlight.icon}</div>
|
|
<div className="font-medium text-sm mb-1">{highlight.label}</div>
|
|
<div className="text-xs text-muted-foreground">{highlight.value}</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
}
|