![]()
void;
+}
+
+export default function SpectacleDetail({ spectacleId, onNavigate }: SpectacleDetailProps) {
+ const spectacle = spectacles.find(s => s.id === spectacleId);
+
+ if (!spectacle) {
+ return (
+
+
Spectacle introuvable.
+
+
+ );
+ }
+
+ const upcomingDates = agenda
+ .filter(event => event.spectacleId === spectacleId)
+ .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
+
+ return (
+
+ {/* Background */}
+
+
+
+
+ {/* Back button */}
+
onNavigate('spectacles')}
+ className="group flex items-center gap-3 mb-10 font-sans font-bold text-night/60 hover:text-dream-purple transition-colors"
+ >
+
+ Tous les spectacles
+
+
+ {/* Hero */}
+
+
+
+

+
+
+
+
+ {spectacle.title}
+
+
+
+
+ {spectacle.age}
+
+
+
+ {spectacle.duration}
+
+
+
+
+ {spectacle.summary}
+
+
+ {spectacle.dossierPro && spectacle.dossierPro !== '#' && (
+
+
+ Dossier Pédagogique
+
+ )}
+
+
+
+ {/* Gallery */}
+ {spectacle.gallery.length > 0 && (
+
+ Galerie
+
+ {spectacle.gallery.map((img, index) => (
+
+

+
+ ))}
+
+
+ )}
+
+ {/* Upcoming dates */}
+ {upcomingDates.length > 0 && (
+
+ Prochaines dates
+
+ {upcomingDates.map(event => {
+ const dateObj = new Date(event.date);
+ return (
+
+
+
+ {dateObj.toLocaleString('fr-FR', { month: 'short' })}
+
+
+ {dateObj.getDate()}
+
+
+
+
+
+ {dateObj.toLocaleString('fr-FR', { weekday: 'long', hour: '2-digit', minute: '2-digit' })}
+
+
+
+ {event.location}
+
+
+ {event.bookingLink && (
+
+ Réserver
+
+ )}
+
+ );
+ })}
+
+
+ )}
+
+
+ );
+}
diff --git a/src/components/Spectacles.tsx b/src/components/Spectacles.tsx
index da6cb4c..a5ead89 100644
--- a/src/components/Spectacles.tsx
+++ b/src/components/Spectacles.tsx
@@ -1,8 +1,12 @@
import { motion } from 'motion/react';
import { spectacles } from '../data';
-import { ExternalLink, Clock, Users, Star, Sparkles } from 'lucide-react';
+import { Clock, Users, Star, Sparkles } from 'lucide-react';
-export default function Spectacles() {
+interface SpectaclesProps {
+ onNavigate: (page: string) => void;
+}
+
+export default function Spectacles({ onNavigate }: SpectaclesProps) {
return (
{/* Background Magic */}
@@ -37,7 +41,7 @@ export default function Spectacles() {
className={`flex flex-col ${index % 2 === 1 ? 'md:flex-row-reverse' : 'md:flex-row'} gap-10 md:gap-16 items-center`}
>
{/* Image Side - Dream Bubble Look */}
-
+
onNavigate(`spectacle-${spectacle.id}`)}>
@@ -77,14 +81,11 @@ export default function Spectacles() {
-
-