Files
breakpilot-compliance/admin-compliance/app/sdk/dsr/[requestId]/_components/DSRSidebar.tsx
Sharang Parnerkar cc3a9a37dc refactor(admin): split dsr/[requestId] page.tsx into colocated components
Split the 854-line DSR detail page into colocated components under
_components/ and a data-loading hook under _hooks/. No behavior changes.

page.tsx is now 172 LOC, all extracted files under 300 LOC.

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

86 lines
2.7 KiB
TypeScript

'use client'
import React from 'react'
import { DSRRequest } from '@/lib/sdk/dsr/types'
import { StatusBadge } from './StatusBadge'
import { DeadlineDisplay } from './DeadlineDisplay'
import { ActionButtons } from './ActionButtons'
import { AuditLog } from './AuditLog'
export function DSRSidebar({
request,
history,
onVerifyIdentity,
onExtendDeadline,
onComplete,
onReject,
onAssign,
}: {
request: DSRRequest
history: any[]
onVerifyIdentity: () => void
onExtendDeadline: () => void
onComplete: () => void
onReject: () => void
onAssign: () => void
}) {
return (
<div className="space-y-6">
{/* Status Card */}
<div className="bg-white rounded-xl border border-gray-200 p-6 space-y-4">
<div className="flex items-center justify-between">
<h3 className="font-medium text-gray-900">Status</h3>
<StatusBadge status={request.status} />
</div>
<div className="border-t border-gray-100 pt-4">
<DeadlineDisplay request={request} />
</div>
{/* Priority */}
<div className="border-t border-gray-100 pt-4">
<div className="text-sm text-gray-500 mb-1">Prioritaet</div>
<div className={`
inline-flex px-2 py-1 text-sm font-medium rounded-lg
${request.priority === 'critical' ? 'bg-red-100 text-red-700' :
request.priority === 'high' ? 'bg-orange-100 text-orange-700' :
request.priority === 'normal' ? 'bg-gray-100 text-gray-700' :
'bg-blue-100 text-blue-700'
}
`}>
{request.priority === 'critical' ? 'Kritisch' :
request.priority === 'high' ? 'Hoch' :
request.priority === 'normal' ? 'Normal' : 'Niedrig'}
</div>
</div>
{/* Assignment */}
<div className="border-t border-gray-100 pt-4">
<div className="text-sm text-gray-500 mb-1">Zugewiesen an</div>
<div className="font-medium text-gray-900">
{request.assignment.assignedTo || 'Nicht zugewiesen'}
</div>
</div>
</div>
{/* Actions Card */}
<div className="bg-white rounded-xl border border-gray-200 p-6">
<h3 className="font-medium text-gray-900 mb-4">Aktionen</h3>
<ActionButtons
request={request}
onVerifyIdentity={onVerifyIdentity}
onExtendDeadline={onExtendDeadline}
onComplete={onComplete}
onReject={onReject}
onAssign={onAssign}
/>
</div>
{/* Audit Log Card */}
<div className="bg-white rounded-xl border border-gray-200 p-6">
<AuditLog history={history} />
</div>
</div>
)
}