mirror of
https://github.com/complexcaresolutions/dak.c2s.git
synced 2026-03-17 17:13:42 +00:00
feat: add /account route, sidebar entry and header link
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
45cadd07ce
commit
5f7b4c6e1d
3 changed files with 24 additions and 2 deletions
|
|
@ -13,6 +13,7 @@ import { ReportsPage } from '@/pages/ReportsPage'
|
|||
import { AdminUsersPage } from '@/pages/AdminUsersPage'
|
||||
import { AdminInvitationsPage } from '@/pages/AdminInvitationsPage'
|
||||
import { AdminAuditPage } from '@/pages/AdminAuditPage'
|
||||
import { AccountPage } from '@/pages/AccountPage'
|
||||
|
||||
function App() {
|
||||
return (
|
||||
|
|
@ -29,6 +30,7 @@ function App() {
|
|||
<Route path="icd" element={<IcdPage />} />
|
||||
<Route path="coding" element={<ProtectedRoute requireAdmin><CodingPage /></ProtectedRoute>} />
|
||||
<Route path="reports" element={<ReportsPage />} />
|
||||
<Route path="account" element={<AccountPage />} />
|
||||
<Route path="admin/users" element={<ProtectedRoute requireAdmin><AdminUsersPage /></ProtectedRoute>} />
|
||||
<Route path="admin/invitations" element={<ProtectedRoute requireAdmin><AdminInvitationsPage /></ProtectedRoute>} />
|
||||
<Route path="admin/audit" element={<ProtectedRoute requireAdmin><AdminAuditPage /></ProtectedRoute>} />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { useNavigate } from 'react-router-dom'
|
||||
import { useAuth } from '@/context/AuthContext'
|
||||
import { useNotifications } from '@/hooks/useNotifications'
|
||||
import { Avatar, AvatarFallback } from '@/components/ui/avatar'
|
||||
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
|
||||
import { Badge } from '@/components/ui/badge'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import {
|
||||
|
|
@ -18,7 +19,7 @@ import {
|
|||
} from '@/components/ui/popover'
|
||||
import { ScrollArea } from '@/components/ui/scroll-area'
|
||||
import { Separator } from '@/components/ui/separator'
|
||||
import { Bell, CheckCheck, LogOut, Menu, Moon, Sun } from 'lucide-react'
|
||||
import { Bell, CheckCheck, LogOut, Menu, Moon, Sun, UserCog } from 'lucide-react'
|
||||
import { useTheme } from '@/hooks/useTheme'
|
||||
|
||||
interface HeaderProps {
|
||||
|
|
@ -26,6 +27,7 @@ interface HeaderProps {
|
|||
}
|
||||
|
||||
export function Header({ onToggleSidebar }: HeaderProps) {
|
||||
const navigate = useNavigate()
|
||||
const { user, logout } = useAuth()
|
||||
const { notifications, unreadCount, markAsRead, markAllAsRead } = useNotifications()
|
||||
const { theme, toggleTheme } = useTheme()
|
||||
|
|
@ -137,6 +139,7 @@ export function Header({ onToggleSidebar }: HeaderProps) {
|
|||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="ghost" className="flex items-center gap-2 px-2">
|
||||
<Avatar size="sm">
|
||||
{user?.avatar_url && <AvatarImage src={user.avatar_url} />}
|
||||
<AvatarFallback>{initials}</AvatarFallback>
|
||||
</Avatar>
|
||||
<span className="hidden text-sm font-medium md:inline-block">
|
||||
|
|
@ -155,6 +158,11 @@ export function Header({ onToggleSidebar }: HeaderProps) {
|
|||
</div>
|
||||
</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem onClick={() => navigate('/account')} className="cursor-pointer">
|
||||
<UserCog className="mr-2 h-4 w-4" />
|
||||
Konto verwalten
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem onClick={() => logout()} className="cursor-pointer">
|
||||
<LogOut className="mr-2 h-4 w-4" />
|
||||
Abmelden
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import {
|
|||
Users,
|
||||
Mail,
|
||||
History,
|
||||
UserCog,
|
||||
} from 'lucide-react'
|
||||
|
||||
interface NavItem {
|
||||
|
|
@ -31,6 +32,10 @@ const mainNavItems: NavItem[] = [
|
|||
{ label: 'Berichte', to: '/reports', icon: FileBarChart },
|
||||
]
|
||||
|
||||
const accountNavItems: NavItem[] = [
|
||||
{ label: 'Kontoverwaltung', to: '/account', icon: UserCog },
|
||||
]
|
||||
|
||||
const adminNavItems: NavItem[] = [
|
||||
{ label: 'Benutzer', to: '/admin/users', icon: Users },
|
||||
{ label: 'Einladungen', to: '/admin/invitations', icon: Mail },
|
||||
|
|
@ -81,6 +86,13 @@ export function Sidebar({ className }: { className?: string }) {
|
|||
))}
|
||||
</nav>
|
||||
|
||||
<Separator />
|
||||
<nav className="flex flex-col gap-1">
|
||||
{accountNavItems.map((item) => (
|
||||
<NavItemLink key={item.to} item={item} />
|
||||
))}
|
||||
</nav>
|
||||
|
||||
{isAdmin && (
|
||||
<>
|
||||
<Separator />
|
||||
|
|
|
|||
Loading…
Reference in a new issue