@exlinep/router
Version:
Router for VKUI
134 lines (110 loc) • 3.57 kB
text/typescript
/**
* Эти функции будут работать после вызова {@link setGlobalRouter}
* @packageDocumentation
*/
import { RouteList, Router } from './entities/Router';
import { Route } from './entities/Route';
import { RouterConfig } from './entities/RouterConfig';
import { __testResetHistoryUniqueId } from './entities/State';
import { PageParams } from './entities/Types';
let globalRouter: Router | null = null;
/**
* @ignore
* @param routes
* @param config
*/
export function startGlobalRouter(routes: RouteList, config: RouterConfig | null = null): Router {
if (globalRouter) {
throw new Error('startGlobalRouter called twice is not allowed');
}
globalRouter = new Router(routes, config);
globalRouter.start();
return globalRouter;
}
export function getGlobalRouter(): Router {
if (!globalRouter) {
throw new Error('getGlobalRouter called before startGlobalRouter');
}
return globalRouter;
}
export function setGlobalRouter(router: Router) {
globalRouter = router;
}
/**
* @ignore
*/
export function dangerousResetGlobalRouterUseForTestOnly() {
if (globalRouter) {
globalRouter.stop();
window.history.pushState(null, '', '');
}
if (window.history.state) {
window.history.pushState(null, '', '');
}
__testResetHistoryUniqueId();
globalRouter = null;
}
export function pushPage(pageId: string, params: PageParams = {}) {
return getGlobalRouter().pushPage(pageId, params);
}
export function replacePage(pageId: string, params: PageParams = {}) {
return getGlobalRouter().replacePage(pageId, params);
}
export function popPage() {
return getGlobalRouter().popPage();
}
export function pushModal(modalId: string, params: PageParams = {}) {
return getGlobalRouter().pushModal(modalId, params);
}
export function pushPopup(popupId: string, params: PageParams = {}) {
return getGlobalRouter().pushPopup(popupId, params);
}
export function replaceModal(modalId: string, params: PageParams = {}) {
return getGlobalRouter().replaceModal(modalId, params);
}
export function replacePopout(popupId: string, params: PageParams = {}) {
return getGlobalRouter().replacePopup(popupId, params);
}
export function popPageTo(x: number|string) {
return getGlobalRouter().popPageTo(x);
}
/**
* @deprecated use popPageIfHasOverlay
*/
export function popPageIfModalOrPopup() {
return getGlobalRouter().popPageIfModalOrPopup();
}
export function popPageIfHasOverlay() {
return getGlobalRouter().popPageIfHasOverlay();
}
export function pushPageAfterPreviews(prevPageId: string, pageId: string, params: PageParams = {}) {
return getGlobalRouter().pushPageAfterPreviews(prevPageId, pageId, params);
}
/**
* @deprecated getCurrentStateOrDef
* @ignore
*/
export function getCurrentRouterState() {
return getCurrentStateOrDef();
}
export function getCurrentStateOrDef() {
return getGlobalRouter().getCurrentStateOrDef();
}
/**
* @deprecated getCurrentRouteOrDef
* @ignore
*/
export function getCurrentRoute(): Route {
return getCurrentRouteOrDef();
}
export function getCurrentRouteOrDef() {
return getGlobalRouter().getCurrentRouteOrDef();
}
export function isInfinityPanel(panelId: string): boolean {
// see Route.getPanelId
return !!panelId && panelId.startsWith('_');
}
export function getInfinityPanelId(panelId: string) {
// see Route.getPanelId
return (panelId.split('..').shift() || '').replace('_', '');
}