diff --git a/apps/console/src/components/OrganizationErrorBoundary.tsx b/apps/console/src/components/OrganizationErrorBoundary.tsx index 9d6e0b6a9..ee023d349 100644 --- a/apps/console/src/components/OrganizationErrorBoundary.tsx +++ b/apps/console/src/components/OrganizationErrorBoundary.tsx @@ -1,5 +1,5 @@ import { AssumptionRequiredError, UnAuthenticatedError } from "@probo/relay"; -import { Navigate, useRouteError } from "react-router"; +import { Navigate, useLocation, useRouteError } from "react-router"; import { useOrganizationId } from "#/hooks/useOrganizationId"; @@ -8,17 +8,18 @@ import { PageError } from "./PageError"; export function OrganizationErrorBoundary() { const error = useRouteError(); const organizationId = useOrganizationId(); + const location = useLocation(); - const search = new URLSearchParams([ - ["organization-id", organizationId], - ]); + const search = new URLSearchParams(); - if (window.location.href !== window.location.origin) { + if (location.pathname !== "/" || location.search !== "") { search.set("continue", window.location.href); } + const queryString = search.toString(); + if (error instanceof UnAuthenticatedError) { - return ; + return ; } if (error instanceof AssumptionRequiredError) { diff --git a/apps/console/src/components/RootErrorBoundary.tsx b/apps/console/src/components/RootErrorBoundary.tsx index 1f2354559..727a9b210 100644 --- a/apps/console/src/components/RootErrorBoundary.tsx +++ b/apps/console/src/components/RootErrorBoundary.tsx @@ -1,21 +1,25 @@ import { UnAuthenticatedError } from "@probo/relay"; -import { Navigate, useRouteError } from "react-router"; +import { Navigate, useLocation, useRouteError } from "react-router"; import { PageError } from "./PageError"; export function RootErrorBoundary() { const error = useRouteError(); + const location = useLocation(); const search = new URLSearchParams(); - if (window.location.href !== window.location.origin) { + + if (location.pathname !== "/" || location.search !== "") { search.set("continue", window.location.href); } + const queryString = search.toString(); + if (error instanceof UnAuthenticatedError) { return ( ); diff --git a/apps/console/src/pages/iam/auth/sign-in/PasswordSignInPage.tsx b/apps/console/src/pages/iam/auth/sign-in/PasswordSignInPage.tsx index ee561f996..651ff8333 100644 --- a/apps/console/src/pages/iam/auth/sign-in/PasswordSignInPage.tsx +++ b/apps/console/src/pages/iam/auth/sign-in/PasswordSignInPage.tsx @@ -3,7 +3,7 @@ import { useTranslate } from "@probo/i18n"; import { Button, Field, IconChevronLeft, useToast } from "@probo/ui"; import type { FormEventHandler } from "react"; import { useMutation } from "react-relay"; -import { Link, useLocation, useSearchParams } from "react-router"; +import { Link, matchPath, useLocation, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; import type { PasswordSignInPageMutation } from "#/__generated__/iam/PasswordSignInPageMutation.graphql"; @@ -37,7 +37,7 @@ export default function PasswordSignInPage() { if (!emailValue || !passwordValue) return; const continueUrlParam = searchParams.get("continue"); - let safeContinueUrl: string; + let safeContinueUrl: URL; if (continueUrlParam) { let continueUrl: URL; try { @@ -45,18 +45,23 @@ export default function PasswordSignInPage() { } catch { continueUrl = new URL(window.location.origin); } - safeContinueUrl = window.location.origin + continueUrl.pathname + continueUrl.search; + safeContinueUrl = new URL(continueUrl.pathname + continueUrl.search, window.location.origin); } else { - safeContinueUrl = window.location.origin; + safeContinueUrl = new URL(window.location.origin); } + const match = matchPath( + { path: "/organizations/:organizationId", caseSensitive: false, end: false }, + safeContinueUrl.pathname, + ); + signIn({ variables: { input: { email: emailValue, password: passwordValue, // Assume when signing in - organizationId: searchParams.get("organization-id"), + organizationId: match && match.params.organizationId, }, }, onCompleted: (_, error) => { @@ -73,7 +78,7 @@ export default function PasswordSignInPage() { return; } - window.location.href = safeContinueUrl; + window.location.href = safeContinueUrl.href; }, onError: (e) => { toast({