backend-lehrer (10 files): - game/database.py (785 → 5), correction_api.py (683 → 4) - classroom_engine/antizipation.py (676 → 5) - llm_gateway schools/edu_search already done in prior batch klausur-service (12 files): - orientation_crop_api.py (694 → 5), pdf_export.py (677 → 4) - zeugnis_crawler.py (676 → 5), grid_editor_api.py (671 → 5) - eh_templates.py (658 → 5), mail/api.py (651 → 5) - qdrant_service.py (638 → 5), training_api.py (625 → 4) website (6 pages): - middleware (696 → 8), mail (733 → 6), consent (628 → 8) - compliance/risks (622 → 5), export (502 → 5), brandbook (629 → 7) studio-v2 (3 components): - B2BMigrationWizard (848 → 3), CleanupPanel (765 → 2) - dashboard-experimental (739 → 2) admin-lehrer (4 files): - uebersetzungen (769 → 4), manager (670 → 2) - ChunkBrowserQA (675 → 6), dsfa/page (674 → 5) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
81 lines
2.3 KiB
TypeScript
81 lines
2.3 KiB
TypeScript
'use client'
|
|
|
|
import { useState, useEffect } from 'react'
|
|
import type { Tab, Document, Version } from './types'
|
|
import { API_BASE } from './types'
|
|
|
|
export function useConsent() {
|
|
const [activeTab, setActiveTab] = useState<Tab>('documents')
|
|
const [documents, setDocuments] = useState<Document[]>([])
|
|
const [versions, setVersions] = useState<Version[]>([])
|
|
const [loading, setLoading] = useState(true)
|
|
const [error, setError] = useState<string | null>(null)
|
|
const [selectedDocument, setSelectedDocument] = useState<string>('')
|
|
const [authToken, setAuthToken] = useState<string>('')
|
|
|
|
useEffect(() => {
|
|
const token = localStorage.getItem('bp_admin_token')
|
|
if (token) {
|
|
setAuthToken(token)
|
|
}
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
if (activeTab === 'documents') {
|
|
loadDocuments()
|
|
} else if (activeTab === 'versions' && selectedDocument) {
|
|
loadVersions(selectedDocument)
|
|
}
|
|
}, [activeTab, selectedDocument, authToken])
|
|
|
|
async function loadDocuments() {
|
|
setLoading(true)
|
|
setError(null)
|
|
try {
|
|
const res = await fetch(`${API_BASE}/documents`, {
|
|
headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {}
|
|
})
|
|
if (res.ok) {
|
|
const data = await res.json()
|
|
setDocuments(data.documents || [])
|
|
} else {
|
|
const errorData = await res.json().catch(() => ({}))
|
|
setError(errorData.error || 'Fehler beim Laden der Dokumente')
|
|
}
|
|
} catch (err) {
|
|
setError('Verbindungsfehler zum Server')
|
|
} finally {
|
|
setLoading(false)
|
|
}
|
|
}
|
|
|
|
async function loadVersions(docId: string) {
|
|
setLoading(true)
|
|
setError(null)
|
|
try {
|
|
const res = await fetch(`${API_BASE}/documents/${docId}/versions`, {
|
|
headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {}
|
|
})
|
|
if (res.ok) {
|
|
const data = await res.json()
|
|
setVersions(data.versions || [])
|
|
} else {
|
|
const errorData = await res.json().catch(() => ({}))
|
|
setError(errorData.error || 'Fehler beim Laden der Versionen')
|
|
}
|
|
} catch (err) {
|
|
setError('Verbindungsfehler zum Server')
|
|
} finally {
|
|
setLoading(false)
|
|
}
|
|
}
|
|
|
|
return {
|
|
activeTab, setActiveTab,
|
|
documents, versions,
|
|
loading, error, setError,
|
|
selectedDocument, setSelectedDocument,
|
|
authToken, setAuthToken,
|
|
}
|
|
}
|