UNPKG

@virtualstate/navigation

Version:

Native JavaScript [navigation](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API) implementation

42 lines (38 loc) 1.45 kB
import { NavigateEvent, Navigation, NavigationInterceptOptions } from "../spec/navigation"; import { getNavigation } from "../get-navigation"; import { createNavigationPromise } from "./create-promise"; import {isPromise, ok} from "../is"; export * from "./events"; export * from "./create-promise"; export function intercept<S>(options?: NavigationInterceptOptions<S>, navigation: Navigation<S> = getNavigation()) { return createNavigationPromise( "navigate", navigation, options?.handler ? onNavigateWithHandler : onNavigateDirectIntercept ); function onNavigateDirectIntercept(event: NavigateEvent) { event.intercept(options); } function onNavigateWithHandler(event: NavigateEvent) { ok(options?.handler, "Expected options.handler"); const { handler, ...rest } = options; return new Promise<void>( (resolve, reject) => { event.intercept({ ...rest, async handler() { try { const result = handler(); if (isPromise(result)) { await result; } resolve(); } catch (error) { reject(error) } } }); } ) } }