page.jsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // ---------------------------------------------------------------------------
  2. // Folder: app/(public)/login
  3. // File: page.jsx
  4. // Relative Path: app/(public)/login/page.jsx
  5. // ---------------------------------------------------------------------------
  6. import LoginForm from "@/components/auth/LoginForm";
  7. import { parseLoginParams } from "@/lib/frontend/authRedirect";
  8. /**
  9. * /login (RHL-020)
  10. *
  11. * Server Component:
  12. * - Parses query params on the server (reason/next).
  13. * - Renders a Client Component (LoginForm) for the actual interaction.
  14. *
  15. * Query params:
  16. * - reason=expired | logged-out
  17. * - next=/some/internal/path
  18. */
  19. export default async function LoginPage({ searchParams }) {
  20. // In newer Next versions, searchParams can be async; awaiting is safe.
  21. const resolvedSearchParams = await searchParams;
  22. // Parse + sanitize using shared pure helper.
  23. const { reason, next } = parseLoginParams(resolvedSearchParams);
  24. return (
  25. <div className="w-full space-y-6">
  26. <div className="space-y-2 text-center">
  27. <h1 className="text-2xl font-semibold tracking-tight">
  28. RHL Lieferscheine
  29. </h1>
  30. <p className="text-sm text-muted-foreground">Sign in to continue</p>
  31. </div>
  32. <LoginForm reason={reason} nextPath={next} />
  33. <p className="text-center text-xs text-muted-foreground">
  34. For support, contact your administrator.
  35. </p>
  36. </div>
  37. );
  38. }