'use client' import React, { useState, useEffect } from 'react' import Link from 'next/link' import NormenTab, { type Norm } from './_components/NormenTab' import PatternsTab, { type HazardPattern } from './_components/PatternsTab' import MeasuresTab, { type ProtectiveMeasure } from './_components/MeasuresTab' import DokumenteTab, { type CEDocument } from './_components/DokumenteTab' type TabId = 'normen' | 'patterns' | 'measures' | 'dokumente' const TABS: { id: TabId; label: string }[] = [ { id: 'normen', label: 'Normen' }, { id: 'patterns', label: 'Patterns' }, { id: 'measures', label: 'Massnahmen' }, { id: 'dokumente', label: 'Dokumente' }, ] export default function IACELibraryPage() { const [activeTab, setActiveTab] = useState('normen') const [norms, setNorms] = useState([]) const [patterns, setPatterns] = useState([]) const [measures, setMeasures] = useState([]) const [documents, setDocuments] = useState([]) const [docsLoading, setDocsLoading] = useState(false) const [docsFetched, setDocsFetched] = useState(false) const [loading, setLoading] = useState(true) useEffect(() => { async function load() { try { const [normsRes, patternsRes, measuresRes] = await Promise.all([ fetch('/api/sdk/v1/iace/norms-library'), fetch('/api/sdk/v1/iace/hazard-patterns'), fetch('/api/sdk/v1/iace/protective-measures-library'), ]) if (normsRes.ok) { const data = await normsRes.json() setNorms(data.norms || []) } if (patternsRes.ok) { const data = await patternsRes.json() setPatterns(data.patterns || []) } if (measuresRes.ok) { const data = await measuresRes.json() setMeasures(data.protective_measures || []) } } catch (err) { console.error('Failed to load IACE library data:', err) } finally { setLoading(false) } } load() }, []) // Lazy-load documents on tab switch useEffect(() => { if (activeTab !== 'dokumente' || docsFetched) return setDocsLoading(true) fetch('/api/sdk/v1/iace/ce-corpus-documents') .then((r) => r.ok ? r.json() : null) .then((data) => { if (data) setDocuments(data.documents || []) }) .catch(() => {}) .finally(() => { setDocsLoading(false); setDocsFetched(true) }) }, [activeTab, docsFetched]) const counts: Record = { normen: norms.length, patterns: patterns.length, measures: measures.length, dokumente: documents.length, } if (loading) { return (
) } return (
{/* Back link + Header */}
Zurueck zur IACE-Uebersicht

Bibliothek

Normen, Hazard Patterns und Schutzmassnahmen fuer die CE-Konformitaetsbewertung

{/* Tabs */}
{/* Tab Content */}
{activeTab === 'normen' && } {activeTab === 'patterns' && } {activeTab === 'measures' && } {activeTab === 'dokumente' && }
) }