This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/admin-v2/app/(admin)/layout.tsx
BreakPilot Dev 660295e218 fix(admin-v2): Restore complete admin-v2 application
The admin-v2 application was incomplete in the repository. This commit
restores all missing components:

- Admin pages (76 pages): dashboard, ai, compliance, dsgvo, education,
  infrastructure, communication, development, onboarding, rbac
- SDK pages (45 pages): tom, dsfa, vvt, loeschfristen, einwilligungen,
  vendor-compliance, tom-generator, dsr, and more
- Developer portal (25 pages): API docs, SDK guides, frameworks
- All components, lib files, hooks, and types
- Updated package.json with all dependencies

The issue was caused by incomplete initial repository state - the full
admin-v2 codebase existed in backend/admin-v2 and docs-src/admin-v2
but was never fully synced to the main admin-v2 directory.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 23:40:15 -08:00

62 lines
1.5 KiB
TypeScript

'use client'
import { useEffect, useState } from 'react'
import { useRouter } from 'next/navigation'
import { Sidebar } from '@/components/layout/Sidebar'
import { Header } from '@/components/layout/Header'
import { Breadcrumbs } from '@/components/common/Breadcrumbs'
import { getStoredRole } from '@/lib/roles'
export default function AdminLayout({
children,
}: {
children: React.ReactNode
}) {
const router = useRouter()
const [sidebarKey, setSidebarKey] = useState(0)
const [loading, setLoading] = useState(true)
useEffect(() => {
// Check if role is stored
const role = getStoredRole()
if (!role) {
// Redirect to role selection
router.replace('/')
} else {
setLoading(false)
}
}, [router])
const handleRoleChange = () => {
// Force sidebar to re-render
setSidebarKey(prev => prev + 1)
}
if (loading) {
return (
<div className="min-h-screen bg-slate-50 flex items-center justify-center">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary-600"></div>
</div>
)
}
return (
<div className="min-h-screen bg-slate-50 flex">
{/* Sidebar */}
<Sidebar key={sidebarKey} onRoleChange={handleRoleChange} />
{/* Main Content */}
<div className="flex-1 ml-64 transition-all duration-300">
{/* Header */}
<Header />
{/* Page Content */}
<main className="p-6">
<Breadcrumbs />
{children}
</main>
</div>
</div>
)
}