refactor(router): introduce app navigation manager
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import type { LoginStatus } from "@/data/dto/auth";
|
||||
|
||||
import { getRouteAccess } from "./route-meta";
|
||||
import { ROUTE_BUILDERS, ROUTES } from "./routes";
|
||||
|
||||
export function isAuthenticatedUser(loginStatus: LoginStatus): boolean {
|
||||
return loginStatus !== "notLoggedIn" && loginStatus !== "guest";
|
||||
}
|
||||
|
||||
export function resolveAuthenticatedNavigation(input: {
|
||||
loginStatus: LoginStatus;
|
||||
targetUrl: string;
|
||||
}): string {
|
||||
if (isAuthenticatedUser(input.loginStatus)) return input.targetUrl;
|
||||
return ROUTE_BUILDERS.authWithRedirect(input.targetUrl);
|
||||
}
|
||||
|
||||
export function resolveRouteGuardRedirect(input: {
|
||||
loginStatus: LoginStatus;
|
||||
pathname: string;
|
||||
searchParams?: string;
|
||||
}): string | null {
|
||||
const access = getRouteAccess(input.pathname);
|
||||
|
||||
if (access === "session" && input.loginStatus === "notLoggedIn") {
|
||||
return ROUTES.splash;
|
||||
}
|
||||
|
||||
if (access === "realUser" && !isAuthenticatedUser(input.loginStatus)) {
|
||||
return ROUTE_BUILDERS.authWithRedirect(
|
||||
buildCurrentUrl(input.pathname, input.searchParams),
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function buildCurrentUrl(pathname: string, searchParams?: string): string {
|
||||
if (!searchParams) return pathname;
|
||||
return `${pathname}?${searchParams}`;
|
||||
}
|
||||
Reference in New Issue
Block a user