diff --git a/src/app/(frontend)/flappy/page.tsx b/src/app/(frontend)/flappy/page.tsx
index bf484f2..c191a76 100644
--- a/src/app/(frontend)/flappy/page.tsx
+++ b/src/app/(frontend)/flappy/page.tsx
@@ -18,7 +18,8 @@ export default async function FlappyPage() {
const { user } = await payload.auth({ headers, canSetHeaders: false });
if (!user) {
- redirect("/login");
+ const pathname = headers.get("x-invoke-path") || "/flappy";
+ redirect(`/login?returnTo=${encodeURIComponent(pathname)}`);
}
const profileRes = await payload.find({
diff --git a/src/app/(frontend)/layout.tsx b/src/app/(frontend)/layout.tsx
index 5bf69a7..239c7cf 100644
--- a/src/app/(frontend)/layout.tsx
+++ b/src/app/(frontend)/layout.tsx
@@ -40,7 +40,6 @@ export const metadata: Metadata = {
export default async function RootLayout(props: { children: React.ReactNode }) {
const { children } = props;
-
const headers = await nextHeaders();
const payloadConfig = await config;
diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx
index 4cfa177..37076a7 100644
--- a/src/app/login/page.tsx
+++ b/src/app/login/page.tsx
@@ -10,12 +10,24 @@ import AppLogo from "@/components/graphics/AppLogo";
// (no DB is available at build time in a container).
export const dynamic = "force-dynamic";
-export default async function LoginPage() {
+function safeReturnTo(value: string | undefined): string | undefined {
+ if (!value?.startsWith("/") || value.startsWith("//")) return undefined;
+ return value;
+}
+
+export default async function LoginPage({
+ searchParams,
+}: {
+ searchParams: Promise<{ returnTo?: string }>;
+}) {
+ const { returnTo } = await searchParams;
+ const target = safeReturnTo(returnTo);
+
const payload = await getPayload({ config });
const headers = await nextHeaders();
const { user } = await payload.auth({ headers, canSetHeaders: false });
- if (user) redirect("/");
+ if (user) redirect(target ?? "/");
return (
@@ -27,7 +39,7 @@ export default async function LoginPage() {
Log in to access the operations dashboard, intelligence, and logistics.
-
+
);
}
diff --git a/src/components/frontend/LandingPage.tsx b/src/components/frontend/LandingPage.tsx
index 425d81b..d812718 100644
--- a/src/components/frontend/LandingPage.tsx
+++ b/src/components/frontend/LandingPage.tsx
@@ -1,6 +1,6 @@
-import Link from "next/link";
import { Button } from "@/components/ui/button";
import AppLogo from "@/components/graphics/AppLogo";
+import { LoginLink } from "@/components/frontend/auth/LoginLink";
export function LandingPage() {
return (
@@ -14,7 +14,7 @@ export function LandingPage() {
operations dashboard, intelligence, and logistics.
diff --git a/src/components/frontend/auth/LoginForm.tsx b/src/components/frontend/auth/LoginForm.tsx
index 1c782db..ee8ef28 100644
--- a/src/components/frontend/auth/LoginForm.tsx
+++ b/src/components/frontend/auth/LoginForm.tsx
@@ -7,7 +7,11 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
-export function LoginForm() {
+interface LoginFormProps {
+ returnTo?: string;
+}
+
+export function LoginForm({ returnTo }: LoginFormProps) {
const router = useRouter();
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
@@ -33,7 +37,12 @@ export function LoginForm() {
return;
}
- router.push("/");
+ // Redirect to returnTo if provided, otherwise to home
+ if (returnTo && returnTo !== "/") {
+ router.push(returnTo);
+ } else {
+ router.push("/");
+ }
router.refresh();
} catch {
setError("Something went wrong. Please try again.");
diff --git a/src/components/frontend/auth/LoginLink.tsx b/src/components/frontend/auth/LoginLink.tsx
new file mode 100644
index 0000000..94d041c
--- /dev/null
+++ b/src/components/frontend/auth/LoginLink.tsx
@@ -0,0 +1,12 @@
+"use client";
+
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import type { ComponentProps } from "react";
+
+type LoginLinkProps = Omit, "href">;
+
+export function LoginLink(props: LoginLinkProps) {
+ const pathname = usePathname();
+ return ;
+}