From 23bdf623b6868489317148e4ce5dc671444823e2 Mon Sep 17 00:00:00 2001 From: Stan Wohlwend Date: Sun, 14 Apr 2024 09:57:02 +0200 Subject: [PATCH] Improved signin flow --- .../projects/[projectId]/auth/route.tsx | 7 ++--- .../projects/[projectId]/route.tsx | 3 ++ .../projects/[projectId]/settings/route.tsx | 7 ++--- .../(protected)/projects/page-client.tsx | 14 +++++---- .../stack-server/src/lib/route-handlers.tsx | 29 +++++++++++++++++++ 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/route.tsx diff --git a/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/auth/route.tsx b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/auth/route.tsx index 5e849371a..75fcb514d 100644 --- a/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/auth/route.tsx +++ b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/auth/route.tsx @@ -1,6 +1,3 @@ -import { deprecatedSmartRouteHandler } from "@/lib/route-handlers"; -import { redirect } from "next/navigation"; +import { redirectHandler } from "@/lib/route-handlers"; -export const GET = deprecatedSmartRouteHandler(async () => { - redirect("/dashboard/auth/users"); -}); +export const GET = redirectHandler("users"); diff --git a/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/route.tsx b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/route.tsx new file mode 100644 index 000000000..4883e9c43 --- /dev/null +++ b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/route.tsx @@ -0,0 +1,3 @@ +import { redirectHandler } from "@/lib/route-handlers"; + +export const GET = redirectHandler("auth"); diff --git a/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/settings/route.tsx b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/settings/route.tsx index 3218312c8..21425cb33 100644 --- a/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/settings/route.tsx +++ b/packages/stack-server/src/app/(main)/(protected)/projects/[projectId]/settings/route.tsx @@ -1,6 +1,3 @@ -import { deprecatedSmartRouteHandler } from "@/lib/route-handlers"; -import { redirect } from "next/navigation"; +import { redirectHandler } from "@/lib/route-handlers"; -export const GET = deprecatedSmartRouteHandler(async () => { - redirect("/dashboard/settings/api-keys"); -}); +export const GET = redirectHandler("api-keys"); diff --git a/packages/stack-server/src/app/(main)/(protected)/projects/page-client.tsx b/packages/stack-server/src/app/(main)/(protected)/projects/page-client.tsx index b0200dc55..c6b348557 100644 --- a/packages/stack-server/src/app/(main)/(protected)/projects/page-client.tsx +++ b/packages/stack-server/src/app/(main)/(protected)/projects/page-client.tsx @@ -8,8 +8,9 @@ import { Dialog } from "@/components/dialog"; import { Paragraph } from "@/components/paragraph"; import { SmartLink } from "@/components/smart-link"; import { useFromNow } from "@/hooks/use-from-now"; -import { runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises"; +import { neverResolve, runAsynchronously } from "@stackframe/stack-shared/dist/utils/promises"; import { Project } from "@stackframe/stack/dist/lib/stack-app"; +import { useRouter } from "next/navigation"; export default function ProjectsPageClient() { @@ -17,7 +18,7 @@ export default function ProjectsPageClient() { const projects = stackApp.useOwnedProjects(); - const [createDialogOpen, setCreateDialogOpen] = useState(false); + const [createDialogOpen, setCreateDialogOpen] = useState(projects.length === 0); return ( <> @@ -59,7 +60,7 @@ function ProjectCard(props: { }; return ( - + {props.project.displayName} @@ -87,6 +88,7 @@ function CreateProjectDialog(props: { open: boolean, onClose(): void }) { const formId = useId(); const [isCreating, setIsCreating] = useState(false); const stackApp = useStackApp({ projectIdMustMatch: "internal" }); + const router = useRouter(); return ( Promise { + return smartRouteHandler({ + request: yup.object({ + url: yup.string().required(), + method: yup.string().oneOf(["GET"]).required(), + }), + response: yup.object({ + statusCode: yup.number().oneOf([301, 302, 303, 307, 308]).required(), + headers: yup.object().shape({ + location: yup.array(yup.string().required()), + }), + bodyType: yup.string().oneOf(["text"]).required(), + body: yup.string().required(), + }), + async handler(req) { + const newUrl = new URL(redirectPath, req.url + "/"); + return { + statusCode, + headers: { + location: [newUrl.toString()], + }, + bodyType: "text", + body: "Redirecting...", + }; + }, + }); +}