// src/pages/DreamPage.tsx import {type NavigateFunction, useNavigate, useParams} from 'react-router-dom'; import {mockDreams} from '../data/MockDreams'; import MockUsers from '../data/MockUsers'; import User from '../types/User'; import type Dream from "../types/Dream.ts"; import {formatDateNumeric, formatDateWithTime} from '../utils/DateUtils'; import {lazy, Suspense} from 'react'; // Lazy load components const DreamVR = lazy(() => import('../components/DreamVR')); const SliderComponent = lazy(() => import('react-slick')); const EEGChart = lazy(() => import('../components/DreamCharts').then(module => ({default: module.EEGChart}))); const VitalsChart = lazy(() => import('../components/DreamCharts').then(module => ({default: module.VitalsChart}))); const MovementChart = lazy(() => import('../components/DreamCharts').then(module => ({default: module.MovementChart}))); export default function DreamPage() { const {id} = useParams<{ id: string }>(); const navigate: NavigateFunction = useNavigate(); const dream: Dream | undefined = mockDreams.find(d => d.id === Number(id)); const user: User | undefined = dream ? MockUsers.find(u => u.id === dream.userId) : undefined; if (!dream) { return (

Traum nicht gefunden.

); } return (
{/* Header */}
{user && ({user.name})}

{dream.title}

{user && (

{user.name} •{' '} {formatDateWithTime(dream.date)}

)}
Traum-Beschreibung
{dream.input.inputType === 'image' && (
{dream.input.imgAlt}

{dream.input.description}

)} {dream.input.inputType === 'audio' && (

{dream.input.transcript}

)} {dream.input.inputType === 'text' && (

{dream.input.input}

)} {dream.input.inputType === 'chip' && (

{dream.input.text}

Lade EEG-Daten...

}>

Lade Vitaldaten...

}>

Lade Bewegungsdaten...

}>
)} {dream.ai?.interpretation && dream.ai.interpretation !== '' && (
KI-Interpretation

{dream.ai.interpretation}

)} {/* Carousel for KI-Bild and KI-Video if both exist */} {dream.ai?.image && dream.ai.video && dream.ai.image !== '' && dream.ai.video !== '' && (
KI-Medien

Lade Medien-Karussell...

}> { import('slick-carousel/slick/slick.css'); import('slick-carousel/slick/slick-theme.css'); }} >
KI-generiertes Traumbild
)} {/* Show KI-Bild alone if video doesn't exist */} {dream.ai?.image && dream.ai.image !== '' && (!dream.ai.video || dream.ai.video === '') && (
KI-Bild
KI-generiertes Traumbild
)} {/* Show KI-Video alone if image doesn't exist */} {dream.ai?.video && dream.ai.video !== '' && (!dream.ai.image || dream.ai.image === '') && (
KI-Video
)} {dream.ai?.audio && dream.ai.audio !== '' && (
KI-Audio
)} {/* VR Visualization */} {(dream.id === 10 || dream.input.inputType === 'chip') && (
VR-Visualisierung

Lade VR-Visualisierung...

}> )}

Details

Eingabetyp {dream.input.inputType}
Datum {formatDateNumeric(dream.date)}
Tags
{dream.tags.map((tag, index) => ( {tag} ))}
); }