NotFoundView.jsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use client";
  2. import React from "react";
  3. import Link from "next/link";
  4. import { useAuth } from "@/components/auth/authContext";
  5. import { branchPath, homePath } from "@/lib/frontend/routes";
  6. import { Button } from "@/components/ui/button";
  7. import {
  8. Card,
  9. CardHeader,
  10. CardTitle,
  11. CardDescription,
  12. CardContent,
  13. CardFooter,
  14. } from "@/components/ui/card";
  15. /**
  16. * NotFoundView (RHL-021)
  17. *
  18. * Used by (protected)/not-found.jsx.
  19. *
  20. * UX rule:
  21. * - All user-facing text must be German.
  22. */
  23. export default function NotFoundView() {
  24. const { status, user } = useAuth();
  25. const isAuthed = status === "authenticated" && user;
  26. const ownBranchHref =
  27. isAuthed && user.role === "branch" && user.branchId
  28. ? branchPath(user.branchId)
  29. : null;
  30. return (
  31. <Card>
  32. <CardHeader>
  33. <CardTitle>Nicht gefunden</CardTitle>
  34. <CardDescription>
  35. Die angeforderte Seite oder Ressource wurde nicht gefunden.
  36. </CardDescription>
  37. </CardHeader>
  38. <CardContent className="space-y-2">
  39. <p className="text-sm text-muted-foreground">
  40. Dies kann passieren, wenn Routenparameter ungültig sind (z. B.
  41. Jahr/Monat/Tag) oder die URL falsch eingegeben wurde.
  42. </p>
  43. </CardContent>
  44. <CardFooter className="flex flex-col gap-2 sm:flex-row sm:justify-end">
  45. <Button variant="outline" asChild>
  46. <Link href={homePath()}>Zur Übersicht</Link>
  47. </Button>
  48. {ownBranchHref ? (
  49. <Button asChild>
  50. <Link href={ownBranchHref}>Zu meiner Niederlassung</Link>
  51. </Button>
  52. ) : null}
  53. </CardFooter>
  54. </Card>
  55. );
  56. }