Files
breakpilot-compliance/admin-compliance/app/sdk/email-templates/page.tsx
Benjamin Admin 8e0645481a feat: Email Template Approval Workflow im Frontend aktivieren
Backend-Endpoints existierten bereits (submit/approve/reject/publish),
wurden aber vom Frontend nicht genutzt. Jetzt vollstaendiger Workflow:

- Submit for Review: Entwurf → Pruefung einreichen
- Approve/Reject: DSB kann genehmigen oder mit Begruendung ablehnen
- Publish: Genehmigte Version veroeffentlichen
- Test senden: Test-E-Mail an beliebige Adresse
- Approval History: Genehmigungshistorie abrufbar
- Status-Badges: draft/review/approved/published mit passenden Buttons

Alle Buttons sind kontextabhaengig — nur sichtbar wenn der Status passt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 23:42:26 +02:00

95 lines
2.9 KiB
TypeScript

'use client'
import { useState } from 'react'
import { StepHeader } from '@/components/sdk/StepHeader'
import { EmailTemplate, TabId } from './_types'
import { useEmailTemplates } from './_hooks/useEmailTemplates'
import { TabNav } from './_components/TabNav'
import { TemplatesTab } from './_components/TemplatesTab'
import { EditorTab } from './_components/EditorTab'
import { SettingsTab } from './_components/SettingsTab'
import { LogsTab } from './_components/LogsTab'
export default function EmailTemplatesPage() {
const [activeTab, setActiveTab] = useState<TabId>('templates')
const {
templates, logs, logsTotal, loading, error,
selectedCategory,
selectedTemplate, editorSubject, editorHtml, editorVersion, saving, previewHtml,
settingsForm, savingSettings,
setError, setSelectedCategory,
setEditorSubject, setEditorHtml,
setSettingsForm,
openEditor, saveVersion, publishVersion, loadPreview,
submitForReview, approveVersion, rejectVersion,
sendTestEmail, loadApprovalHistory,
saveSettings2, initializeDefaults,
} = useEmailTemplates(activeTab)
const handleEdit = async (template: EmailTemplate) => {
setActiveTab('editor')
await openEditor(template)
}
return (
<div className="space-y-6">
<StepHeader stepId="email-templates" />
{error && (
<div className="bg-red-50 border border-red-200 rounded-lg p-3 text-sm text-red-700">
{error}
<button onClick={() => setError(null)} className="ml-2 underline">Schliessen</button>
</div>
)}
<TabNav activeTab={activeTab} onTabChange={setActiveTab} logsTotal={logsTotal} />
{activeTab === 'templates' && (
<TemplatesTab
templates={templates}
loading={loading}
selectedCategory={selectedCategory}
onCategoryChange={setSelectedCategory}
onEdit={handleEdit}
onInitialize={initializeDefaults}
/>
)}
{activeTab === 'editor' && (
<EditorTab
template={selectedTemplate}
version={editorVersion}
subject={editorSubject}
html={editorHtml}
previewHtml={previewHtml}
saving={saving}
onSubjectChange={setEditorSubject}
onHtmlChange={setEditorHtml}
onSave={saveVersion}
onPublish={publishVersion}
onPreview={loadPreview}
onBack={() => setActiveTab('templates')}
onSubmitForReview={submitForReview}
onApprove={approveVersion}
onReject={rejectVersion}
onSendTest={sendTestEmail}
/>
)}
{activeTab === 'settings' && settingsForm && (
<SettingsTab
settings={settingsForm}
saving={savingSettings}
onChange={setSettingsForm}
onSave={saveSettings2}
/>
)}
{activeTab === 'logs' && (
<LogsTab logs={logs} total={logsTotal} />
)}
</div>
)
}