Files
breakpilot-compliance/admin-compliance/app/sdk/email-templates/page.tsx
Sharang Parnerkar ffae41237e refactor(admin): split email-templates page.tsx into colocated components
Extract tabs nav, templates grid, editor split view, settings form,
logs table, and data-loading/actions hook into _components/ and
_hooks/. page.tsx reduced from 816 to 88 LOC.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 08:24:48 +02:00

89 lines
2.7 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,
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')}
/>
)}
{activeTab === 'settings' && settingsForm && (
<SettingsTab
settings={settingsForm}
saving={savingSettings}
onChange={setSettingsForm}
onSave={saveSettings2}
/>
)}
{activeTab === 'logs' && (
<LogsTab logs={logs} total={logsTotal} />
)}
</div>
)
}