26 lines · 863 B
import { redirect } from "@tanstack/react-router";
import { safeReturnPath } from "~/lib/return-to";
import type { Viewer } from "~/lib/types";

/** For sign-in, sign-up and recovery pages: someone already signed in goes where they were headed instead. */
export function redirectSignedIn({
  context,
  search,
}: {
  context: { viewer: Viewer | null };
  search: { next?: string };
}): void {
  if (context.viewer) throw redirect({ href: safeReturnPath(search.next) ?? "/", replace: true });
}

/** For pages that need an account: signed-out visitors go to sign in and come back here afterwards. */
export function requireSignedIn({
  context,
  location,
}: {
  context: { viewer: Viewer | null };
  location: { href: string };
}): void {
  if (!context.viewer) throw redirect({ to: "/login", search: { next: safeReturnPath(location.href) ?? undefined } });
}