TopNav.jsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // ---------------------------------------------------------------------------
  2. // Folder: components/app-shell
  3. // File: TopNav.jsx
  4. // Relative Path: components/app-shell/TopNav.jsx
  5. // ---------------------------------------------------------------------------
  6. import React from "react";
  7. import Link from "next/link";
  8. import { Button } from "@/components/ui/button";
  9. import UserStatus from "@/components/app-shell/UserStatus";
  10. import LogoutButton from "@/components/auth/LogoutButton";
  11. /**
  12. * TopNav
  13. *
  14. * RHL-020:
  15. * - UserStatus now displays real session info (via AuthContext).
  16. * - Logout button is now functional (calls apiClient.logout + redirects to /login).
  17. *
  18. * Notes:
  19. * - Theme toggle is still a placeholder in this ticket.
  20. * - We keep this component server-renderable for stability and SSR tests.
  21. * LogoutButton is a client component, but it does not require Next router hooks.
  22. */
  23. export default function TopNav() {
  24. return (
  25. <header className="sticky top-0 z-50 w-full border-b bg-background/80 backdrop-blur">
  26. <div className="mx-auto flex h-14 max-w-7xl items-center justify-between px-4">
  27. <div className="flex items-center gap-3">
  28. <Link href="/" className="font-semibold tracking-tight">
  29. RHL Lieferscheine
  30. </Link>
  31. <span className="text-xs text-muted-foreground">
  32. App shell scaffold
  33. </span>
  34. </div>
  35. <div className="flex items-center gap-2">
  36. <UserStatus />
  37. <Button
  38. variant="outline"
  39. size="sm"
  40. disabled
  41. aria-disabled="true"
  42. title="Theme toggle will be added later"
  43. >
  44. Theme
  45. </Button>
  46. <LogoutButton />
  47. </div>
  48. </div>
  49. </header>
  50. );
  51. }