'use client' /** * Audit Checklist Page - Sprint 3 Feature * * Ermoeglicht Auditoren: * - Audit-Sessions zu erstellen und zu verwalten * - Checklisten-Items durchzuarbeiten * - Sign-offs mit digitaler Signatur (SHA-256) zu erstellen * - Fortschritt und Statistiken zu verfolgen */ import Link from 'next/link' import AdminLayout from '@/components/admin/AdminLayout' import { RESULT_STATUS, SESSION_STATUS } from './_components/types' import { useAuditChecklist } from './_components/useAuditChecklist' import SessionCard from './_components/SessionCard' import AuditProgressBar from './_components/AuditProgressBar' import ChecklistItemRow from './_components/ChecklistItemRow' import CreateSessionModal from './_components/CreateSessionModal' import SignOffModal from './_components/SignOffModal' export default function AuditChecklistPage() { const { sessions, selectedSession, setSelectedSession, filteredItems, statistics, regulations, loading, loadingChecklist, error, filterStatus, setFilterStatus, filterRegulation, setFilterRegulation, searchQuery, setSearchQuery, showCreateModal, setShowCreateModal, showSignOffModal, setShowSignOffModal, selectedItem, setSelectedItem, lang, handleSignOff, handleCreateSession, } = useAuditChecklist() // Session list view when no session is selected if (!selectedSession && !loading) { return (
Zurueck zu Compliance
{error && (
{error}
)}
{sessions.length === 0 ? (

Keine Audit-Sessions

Erstellen Sie eine neue Audit-Session um zu beginnen.

) : ( sessions.map(session => ( setSelectedSession(session)} /> )) )}
{showCreateModal && ( setShowCreateModal(false)} onCreate={handleCreateSession} /> )}
) } if (loading) { return (
) } // Checklist view for selected session return (
{SESSION_STATUS[selectedSession?.status || 'draft'].label}
{statistics && } {/* Filters */}
setSearchQuery(e.target.value)} placeholder="Artikel, Titel..." className="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm" />
{/* Checklist Items */}
{loadingChecklist ? (

Checkliste wird geladen...

) : filteredItems.length === 0 ? (

Keine Eintraege gefunden

) : (
{filteredItems.map((item, index) => ( { setSelectedItem(item) setShowSignOffModal(true) }} lang={lang} /> ))}
)}
{showSignOffModal && selectedItem && ( { setShowSignOffModal(false) setSelectedItem(null) }} onSubmit={(result, notes, sign) => handleSignOff(selectedItem, result, notes, sign)} /> )}
) }