import React, { useState, useEffect } from 'react'; interface H5File { filename: string; nodeId: string; date: string; } interface WaveformData { samples: number[]; sample_rate: number; duration_sec: number; channel: number; channel_name: string; unit: string; stats: { min: number; max: number; mean: number; std: number; rms: number; }; } export default function H5Dashboard() { const [files, setFiles] = useState([]); const [selectedFile, setSelectedFile] = useState(null); const [waveformData, setWaveformData] = useState(null); const [channel, setChannel] = useState(1); const [loading, setLoading] = useState(false); const [startTime, setStartTime] = useState(0); const [duration, setDuration] = useState(10); const [globalView, setGlobalView] = useState(false); useEffect(() => { fetch('/seismic/api/h5/files') .then(r => r.json()) .then(data => setFiles(data.files || [])) .catch(console.error); }, []); const loadWaveform = async (file: string, ch: number, start: number, dur: number, global: boolean = false) => { setLoading(true); try { const params = new URLSearchParams({ file, channel: String(ch), start: String(start), duration: global ? '0' : String(dur) }); const response = await fetch(`/seismic/api/h5/data?${params}`); const data = await response.json(); setWaveformData(data); } catch (error) { console.error(error); } finally { setLoading(false); } }; const handleFileSelect = (file: string) => { setSelectedFile(file); setGlobalView(false); loadWaveform(file, channel, startTime, duration, false); }; const handleChannelChange = (ch: number) => { setChannel(ch); if (selectedFile) loadWaveform(selectedFile, ch, startTime, duration, globalView); }; const handleGlobalView = () => { if (selectedFile) { setGlobalView(true); loadWaveform(selectedFile, channel, 0, 0, true); } }; return (
{/* Header */}

🎯 Dashboard H5 - Visualisation Waveforms

{files.length} fichiers H5 calibrés disponibles

{/* Sidebar - Liste des fichiers */}

📁 Fichiers H5

{files.map((file, idx) => ( ))}
{/* Main content - Waveform */}
{!selectedFile && (
📊

Sélectionnez un fichier H5 pour visualiser les waveforms

)} {selectedFile && ( <> {/* Controls */}
{[1, 2, 3, 4].map(ch => ( ))}
{/* Waveform Display */} {loading && (

Chargement des données...

)} {waveformData && !loading && (
{/* Info bar */}
Canal
{waveformData.channel_name}
Unité
{waveformData.unit}
Durée
{waveformData.duration_sec.toFixed(1)} s
Échantillons
{waveformData.samples.length}
{/* Stats */}
{Object.entries(waveformData.stats).map(([key, value]) => (
{key}
{value.toExponential(3)}
))}
{/* Waveform visualization (simple text representation for now) */}
Waveform Preview (premiers échantillons) :
                      {waveformData.samples.slice(0, 50).map((v, i) => 
                        `[${i.toString().padStart(4, '0')}] ${v.toExponential(4)} ${waveformData.unit}`
                      ).join('\n')}
                      {waveformData.samples.length > 50 && `\n... (${waveformData.samples.length - 50} échantillons restants)`}
                    
)} )}
); }