Files
trackgo-fe/apps/web/src/core/lib/client-navigation.ts
T
shancheas b0090bc15f feat: implement web URL constants and enhance navigation handling
- Introduced a centralized `WEB_URL` constant for managing application routes, improving maintainability and readability across components.
- Updated various components, including login, auth, and main app modules, to utilize the new `WEB_URL` constants for navigation, ensuring consistency in route management.
- Added a new `AppHomeRedirect` component to streamline user redirection based on privileges, enhancing user experience.
- Implemented client-side navigation functions to prevent full page reloads, improving performance and user interaction.
- Added tests for new functionalities, ensuring reliability in navigation and URL handling.

These changes significantly enhance the application's routing structure and navigation efficiency, providing a more cohesive user experience.
2026-09-02 11:17:51 +07:00

46 lines
1.1 KiB
TypeScript

type ClientNavigate = (to: string, options: { replace: boolean }) => void | Promise<void>;
interface SessionLifecycle {
onStart?: () => void | Promise<void>;
onEnd?: () => void;
}
let navigateFn: ClientNavigate | null = null;
let sessionLifecycle: SessionLifecycle = {};
export function registerClientNavigate(fn: ClientNavigate): void {
navigateFn = fn;
}
export function registerSessionLifecycle(lifecycle: SessionLifecycle): void {
sessionLifecycle = lifecycle;
}
export function resetClientNavigate(): void {
navigateFn = null;
sessionLifecycle = {};
}
export function notifySessionStart(): void {
void sessionLifecycle.onStart?.();
}
export function notifySessionEnd(): void {
sessionLifecycle.onEnd?.();
}
/**
* Stay inside the already-loaded SPA when possible.
* A full `location.replace` makes nginx look up a real file (e.g. `/auth/login`) and 404.
*/
export function clientReplace(to: string): void {
if (!navigateFn) {
window.location.replace(to);
return;
}
void Promise.resolve(navigateFn(to, { replace: true })).catch(() => {
window.location.replace(to);
});
}