vasille-router
Version:
The first Developer eXperience Orientated front-end framework (router library).
40 lines (39 loc) • 2.66 kB
TypeScript
import { App, Fragment, Reference } from "vasille";
import { TagOptions } from "vasille/web-runner";
import { Router as AbstractRouter, RouteRenderScope, RouterInitialization } from "../router.js";
import { QueryParams, Answer, ScreenProps, RouteParameters } from "../types.js";
export interface WebRouterInitialization<Routes extends string> extends RouterInitialization<Node, Element, TagOptions, Routes, {}> {
loadingScreen?(props: object, node: Fragment<Node, Element, TagOptions>): void;
loadingOverlay?(props: object, node: Fragment<Node, Element, TagOptions>): void;
}
export type NavigationMode = "silent" | "loading-screen" | "loading-overlay";
export declare class Router<Routes extends string> extends AbstractRouter<Node, Element, TagOptions, Routes, {}, [
NavigationMode
]> {
readonly currentUrl: Reference<string>;
readonly loadingUrl: Reference<string>;
protected readonly webInit: WebRouterInitialization<Routes>;
protected readonly window: Window;
protected readonly location: Location;
protected readonly node: Fragment<Node, Element, TagOptions>;
protected loadingNode: Fragment<Node, Element, TagOptions>;
protected contentNode: Fragment<Node, Element, TagOptions>;
protected overlayNode: Fragment<Node, Element, TagOptions>;
constructor(window: Window, location: Location, node: Fragment<Node, Element, TagOptions>, init: WebRouterInitialization<Routes>);
navigate<T extends Routes>(route: T, params: RouteParameters<T>, mode: NavigationMode): void;
/**
* Do a silent navigation without any modification in DOM until successful
* @param route target route
* @param params target route params
* @throws {Error} a lot of errors
*/
silentNavigate<T extends Routes>(route: T, params: RouteParameters<T>): Promise<void>;
reload(): void;
protected doNavigate(url: string, canNavigate: boolean, mode: NavigationMode): void;
protected parseUrl(url: string): [string, QueryParams, string];
protected loadTarget<Route extends string>(target: Answer<Node, Element, TagOptions, Route, {}>, props: ScreenProps<Route>, mode: NavigationMode): Promise<void>;
protected renderScreen<Props>(screen: (props: Props, ctx: Fragment<Node, Element, TagOptions>) => void | Promise<void>, props: Props, scope: RouteRenderScope): Promise<void>;
protected clearLoadings(): void;
protected clearNode(node: Fragment<Node, Element, TagOptions>): void;
}
export declare function routeApp<Routes extends string>(node: Element, window: Window, location: Location, init: WebRouterInitialization<Routes>, debugUi?: boolean): App<Node, Element, TagOptions, {}>;