2026-04-27 11:53:25 +02:00
|
|
|
import React, { useState } from 'react'
|
2026-04-27 11:32:30 +02:00
|
|
|
import { Navigate } from 'react-router-dom'
|
|
|
|
|
import { useAuth } from '../context/AuthContext'
|
|
|
|
|
import AdminPageNav from '../components/AdminPageNav'
|
2026-04-27 11:53:25 +02:00
|
|
|
import SkillsCatalogAdmin from '../components/admin/SkillsCatalogAdmin'
|
|
|
|
|
import MaturityModelsAdminPanel from '../components/admin/MaturityModelsAdminPanel'
|
2026-04-27 12:35:48 +02:00
|
|
|
import MaturityModelBindingsAdmin from '../components/admin/MaturityModelBindingsAdmin'
|
2026-04-27 12:48:22 +02:00
|
|
|
import MaturityMatrixToolsAdmin from '../components/admin/MaturityMatrixToolsAdmin'
|
2026-04-27 11:42:03 +02:00
|
|
|
|
2026-04-27 11:32:30 +02:00
|
|
|
export default function AdminMaturityModelsPage() {
|
|
|
|
|
const { user } = useAuth()
|
|
|
|
|
const isAdmin = user?.role === 'admin' || user?.role === 'superadmin'
|
2026-04-27 11:53:25 +02:00
|
|
|
const [tab, setTab] = useState('catalog')
|
2026-04-27 11:32:30 +02:00
|
|
|
|
|
|
|
|
if (!isAdmin) {
|
|
|
|
|
return <Navigate to="/" replace />
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
2026-04-27 11:53:25 +02:00
|
|
|
<div className="admin-shell admin-page">
|
2026-04-27 11:32:30 +02:00
|
|
|
<AdminPageNav />
|
|
|
|
|
|
2026-04-27 11:53:25 +02:00
|
|
|
<header className="admin-maturity-header">
|
|
|
|
|
<h1 className="admin-maturity-header__title">Admin: Fähigkeitsmatrix und Katalog</h1>
|
|
|
|
|
<p className="admin-maturity-header__subtitle muted">
|
|
|
|
|
Hierarchie der Fähigkeiten und Reifegradmodelle mit Matrix-Pflege.
|
|
|
|
|
</p>
|
|
|
|
|
</header>
|
|
|
|
|
|
2026-05-06 12:20:22 +02:00
|
|
|
<div className="admin-page-subtabs" role="tablist" aria-label="Bereiche Fähigkeiten">
|
2026-04-27 11:53:25 +02:00
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
role="tab"
|
|
|
|
|
aria-selected={tab === 'catalog'}
|
2026-05-06 12:20:22 +02:00
|
|
|
className={
|
|
|
|
|
'admin-page-subtabs__btn' + (tab === 'catalog' ? ' admin-page-subtabs__btn--active' : '')
|
|
|
|
|
}
|
2026-04-27 11:53:25 +02:00
|
|
|
onClick={() => setTab('catalog')}
|
|
|
|
|
>
|
|
|
|
|
Katalog und Hierarchie
|
|
|
|
|
</button>
|
|
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
role="tab"
|
|
|
|
|
aria-selected={tab === 'models'}
|
2026-05-06 12:20:22 +02:00
|
|
|
className={
|
|
|
|
|
'admin-page-subtabs__btn' + (tab === 'models' ? ' admin-page-subtabs__btn--active' : '')
|
|
|
|
|
}
|
2026-04-27 11:53:25 +02:00
|
|
|
onClick={() => setTab('models')}
|
|
|
|
|
>
|
|
|
|
|
Reifegradmodelle
|
|
|
|
|
</button>
|
2026-04-27 12:35:48 +02:00
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
role="tab"
|
|
|
|
|
aria-selected={tab === 'bindings'}
|
2026-05-06 12:20:22 +02:00
|
|
|
className={
|
|
|
|
|
'admin-page-subtabs__btn' + (tab === 'bindings' ? ' admin-page-subtabs__btn--active' : '')
|
|
|
|
|
}
|
2026-04-27 12:35:48 +02:00
|
|
|
onClick={() => setTab('bindings')}
|
|
|
|
|
>
|
|
|
|
|
Kontext-Zuordnung
|
|
|
|
|
</button>
|
2026-04-27 12:48:22 +02:00
|
|
|
<button
|
|
|
|
|
type="button"
|
|
|
|
|
role="tab"
|
|
|
|
|
aria-selected={tab === 'matrixviz'}
|
2026-05-06 12:20:22 +02:00
|
|
|
className={
|
|
|
|
|
'admin-page-subtabs__btn' + (tab === 'matrixviz' ? ' admin-page-subtabs__btn--active' : '')
|
|
|
|
|
}
|
2026-04-27 12:48:22 +02:00
|
|
|
onClick={() => setTab('matrixviz')}
|
|
|
|
|
>
|
|
|
|
|
Matrix-Ansicht und Export
|
|
|
|
|
</button>
|
2026-04-27 11:53:25 +02:00
|
|
|
</div>
|
2026-04-27 11:32:30 +02:00
|
|
|
|
2026-04-27 11:53:25 +02:00
|
|
|
<div className="admin-tabs__panel" role="tabpanel">
|
2026-04-27 12:35:48 +02:00
|
|
|
{tab === 'catalog' ? (
|
|
|
|
|
<SkillsCatalogAdmin />
|
|
|
|
|
) : tab === 'bindings' ? (
|
|
|
|
|
<MaturityModelBindingsAdmin />
|
2026-04-27 12:48:22 +02:00
|
|
|
) : tab === 'matrixviz' ? (
|
|
|
|
|
<MaturityMatrixToolsAdmin />
|
2026-04-27 12:35:48 +02:00
|
|
|
) : (
|
|
|
|
|
<MaturityModelsAdminPanel />
|
|
|
|
|
)}
|
2026-04-27 11:32:30 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|