fix: add missing training page components to fix admin-compliance Docker build
Some checks failed
Build + Deploy / build-admin-compliance (push) Failing after 34s
Build + Deploy / build-developer-portal (push) Successful in 56s
Build + Deploy / build-tts (push) Successful in 1m8s
CI/CD / go-lint (push) Has been skipped
Build + Deploy / trigger-orca (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Successful in 38s
CI/CD / test-python-backend-compliance (push) Successful in 32s
Build + Deploy / build-backend-compliance (push) Successful in 7s
Build + Deploy / build-ai-sdk (push) Successful in 7s
Build + Deploy / build-document-crawler (push) Successful in 33s
Build + Deploy / build-dsms-gateway (push) Successful in 20s
CI/CD / test-python-dsms-gateway (push) Has been cancelled
CI/CD / validate-canonical-controls (push) Has been cancelled
CI/CD / test-python-document-crawler (push) Has been cancelled
Some checks failed
Build + Deploy / build-admin-compliance (push) Failing after 34s
Build + Deploy / build-developer-portal (push) Successful in 56s
Build + Deploy / build-tts (push) Successful in 1m8s
CI/CD / go-lint (push) Has been skipped
Build + Deploy / trigger-orca (push) Has been skipped
CI/CD / python-lint (push) Has been skipped
CI/CD / nodejs-lint (push) Has been skipped
CI/CD / test-go-ai-compliance (push) Successful in 38s
CI/CD / test-python-backend-compliance (push) Successful in 32s
Build + Deploy / build-backend-compliance (push) Successful in 7s
Build + Deploy / build-ai-sdk (push) Successful in 7s
Build + Deploy / build-document-crawler (push) Successful in 33s
Build + Deploy / build-dsms-gateway (push) Successful in 20s
CI/CD / test-python-dsms-gateway (push) Has been cancelled
CI/CD / validate-canonical-controls (push) Has been cancelled
CI/CD / test-python-document-crawler (push) Has been cancelled
All 8 components imported by app/sdk/training/page.tsx were missing. Docker build was failing with Module not found errors. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
80
admin-compliance/app/sdk/training/_components/MatrixTab.tsx
Normal file
80
admin-compliance/app/sdk/training/_components/MatrixTab.tsx
Normal file
@@ -0,0 +1,80 @@
|
||||
'use client'
|
||||
|
||||
import type { MatrixResponse } from '@/lib/sdk/training/types'
|
||||
import { ALL_ROLES, ROLE_LABELS } from '@/lib/sdk/training/types'
|
||||
|
||||
export default function MatrixTab({
|
||||
matrix,
|
||||
onDeleteEntry,
|
||||
onAddEntry,
|
||||
}: {
|
||||
matrix: MatrixResponse
|
||||
onDeleteEntry: (roleCode: string, moduleId: string) => void
|
||||
onAddEntry: (roleCode: string) => void
|
||||
}) {
|
||||
return (
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center justify-between">
|
||||
<p className="text-sm text-gray-500">Pflichtzuordnung von Schulungsmodulen zu Rollen</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white border rounded-lg overflow-hidden">
|
||||
<table className="w-full text-sm">
|
||||
<thead className="bg-gray-50">
|
||||
<tr>
|
||||
<th className="px-4 py-3 text-left font-medium text-gray-600 w-48">Rolle</th>
|
||||
<th className="px-4 py-3 text-left font-medium text-gray-600">Zugewiesene Module</th>
|
||||
<th className="px-4 py-3 text-right font-medium text-gray-600 w-24">Aktion</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody className="divide-y">
|
||||
{ALL_ROLES.map(role => {
|
||||
const entries = matrix.entries[role] ?? []
|
||||
return (
|
||||
<tr key={role} className="hover:bg-gray-50">
|
||||
<td className="px-4 py-3">
|
||||
<div className="font-medium text-gray-900">{ROLE_LABELS[role] ?? role}</div>
|
||||
<div className="text-xs text-gray-400">{role}</div>
|
||||
</td>
|
||||
<td className="px-4 py-3">
|
||||
{entries.length === 0 ? (
|
||||
<span className="text-gray-400 text-xs">Keine Module zugewiesen</span>
|
||||
) : (
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{entries.map(entry => (
|
||||
<span
|
||||
key={entry.id}
|
||||
className="inline-flex items-center gap-1 text-xs bg-blue-50 text-blue-700 border border-blue-200 px-2 py-0.5 rounded-full"
|
||||
>
|
||||
<code className="text-xs">{entry.module_code ?? entry.module_id.slice(0, 8)}</code>
|
||||
{entry.is_mandatory && <span className="text-red-500 font-bold">*</span>}
|
||||
<button
|
||||
onClick={() => onDeleteEntry(role, entry.module_id)}
|
||||
className="ml-0.5 text-blue-400 hover:text-red-600"
|
||||
title="Entfernen"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</td>
|
||||
<td className="px-4 py-3 text-right">
|
||||
<button
|
||||
onClick={() => onAddEntry(role)}
|
||||
className="px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-700"
|
||||
>
|
||||
+ Modul
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
})}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p className="text-xs text-gray-400">* = Pflichtmodul</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user