feat: Consent Document Approval Workflow im Frontend aktivieren

VersionsTab zeigt jetzt kontextabhaengige Workflow-Buttons:
- Entwurf → "Zur Pruefung" (Submit for Review)
- In Pruefung → "Genehmigen" / "Ablehnen" (Approve/Reject)
- Genehmigt → "Publizieren" (Publish)

Backend-Endpoints (legal_document_routes.py) existierten bereits,
wurden aber vom Frontend nicht genutzt. Status-Badges erweitert:
draft, review, approved, published, archived, rejected.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-04-27 23:52:40 +02:00
parent 8e0645481a
commit 7dccdf4695
3 changed files with 109 additions and 58 deletions

View File

@@ -277,6 +277,45 @@ export function useConsentData(activeTab: Tab, selectedDocument: string) {
localStorage.setItem('sdk-email-templates', JSON.stringify(updated))
}
// Document version workflow actions (via admin consent proxy → legal-documents backend)
async function submitVersionForReview(versionId: string) {
try {
const res = await fetch(`${API_BASE}/versions/${versionId}/submit-review`, {
method: 'POST', headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {},
})
if (res.ok && selectedDocument) await loadVersions(selectedDocument)
} catch (err) { console.error('Submit failed:', err) }
}
async function approveVersion(versionId: string) {
try {
const res = await fetch(`${API_BASE}/versions/${versionId}/approve`, {
method: 'POST', headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {},
})
if (res.ok && selectedDocument) await loadVersions(selectedDocument)
} catch (err) { console.error('Approve failed:', err) }
}
async function rejectVersion(versionId: string, comment: string) {
try {
const res = await fetch(`${API_BASE}/versions/${versionId}/reject`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', ...(authToken ? { 'Authorization': `Bearer ${authToken}` } : {}) },
body: JSON.stringify({ comment }),
})
if (res.ok && selectedDocument) await loadVersions(selectedDocument)
} catch (err) { console.error('Reject failed:', err) }
}
async function publishVersion(versionId: string) {
try {
const res = await fetch(`${API_BASE}/versions/${versionId}/publish`, {
method: 'POST', headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {},
})
if (res.ok) { if (selectedDocument) await loadVersions(selectedDocument); await loadDocuments() }
} catch (err) { console.error('Publish failed:', err) }
}
return {
documents, versions, loading, error, setError,
consentStats, dsrCounts, dsrOverview,
@@ -286,6 +325,7 @@ export function useConsentData(activeTab: Tab, selectedDocument: string) {
savingTemplateId, savingProcessId,
saveApiEmailTemplate, saveApiGdprProcess,
loadApiEmailTemplates,
submitVersionForReview, approveVersion, rejectVersion, publishVersion,
authToken, setAuthToken,
}
}