refactor(router): introduce app navigation manager

This commit is contained in:
2026-07-03 14:09:13 +08:00
parent 8a586e4471
commit 91dde42f92
23 changed files with 669 additions and 277 deletions
+41
View File
@@ -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}`;
}