@gluonjs/router / packages/router/src / isNavigationFailure
Function: isNavigationFailure()
isNavigationFailure(
value,type?):value is NavigationFailure
Parameters
value
unknown
type?
Returns
value is NavigationFailure
Example
Narrow the result of push() or replace() and optionally match one failure type before inspecting its source and destination:
import {
NavigationFailureType,
createMemoryHistory,
createRouter,
isNavigationFailure,
type AfterNavigationHook,
type NavigationFailure,
type NavigationFailureTypeValue,
type NavigationGuard,
type NavigationGuardReturn,
type RouteLocationNormalized,
type RouteLocationPath,
type RouteLocationRaw,
type Router,
type RouterSnapshot,
type ScrollBehavior,
} from '@gluonjs/router';
const target = { path: '/checkout', query: { step: 2 } } satisfies RouteLocationPath;
const rawTarget: RouteLocationRaw = target;
const guardResult: NavigationGuardReturn = true;
const requireCart: NavigationGuard = (to: RouteLocationNormalized) =>
to.path === '/checkout' ? guardResult : true;
const restoreScroll: ScrollBehavior = (_to, _from, savedPosition) =>
savedPosition ?? { left: 0, top: 0 };
const afterEach: AfterNavigationHook = (to, from, failure?: NavigationFailure) =>
console.log(`${from.fullPath} -> ${to.fullPath}`, failure?.message);
const router: Router = createRouter({
history: createMemoryHistory(['/shop']),
routes: [{ path: '/shop' }, { path: '/checkout' }],
scrollBehavior: restoreScroll,
});
const stopGuard = router.beforeEach(requireCart);
const stopAfter = router.afterEach(afterEach);
const failure = await router.push(rawTarget);
const failureType: NavigationFailureTypeValue = NavigationFailureType.aborted;
if (isNavigationFailure(failure, failureType)) console.warn(failure.to.fullPath);
const snapshot: RouterSnapshot = router.dehydrate();
console.log(snapshot.location, router.currentRoute.value.fullPath);
stopGuard();
stopAfter();
router.destroy();