@eolme/vma-router
Version:
Router for VK Mini Apps
104 lines (103 loc) • 2.93 kB
JavaScript
import Router from './entities/Router';
import { error, configure } from './utils/report';
let globalRouter = null;
export function startGlobalRouter(routes, config = {}) {
configure(config);
if (globalRouter) {
error('startGlobalRouter called twice is not allowed');
return globalRouter;
}
globalRouter = new Router(routes);
return globalRouter;
}
export function getGlobalRouter() {
if (!globalRouter) {
error('getGlobalRouter called before startGlobalRouter');
return;
}
return globalRouter;
}
export function pushPage(page, params = {}) {
return getGlobalRouter().pushPage(page, params);
}
export function replacePage(page, params = {}) {
return getGlobalRouter().replacePage(page, params);
}
export function popPage() {
return getGlobalRouter().popPage();
}
export function pushModal(modal, params = {}) {
return getGlobalRouter().pushModal(modal, params);
}
export function replaceModal(modal, params = {}) {
return getGlobalRouter().replaceModal(modal, params);
}
export function pushPopup(popup, params = {}) {
return getGlobalRouter().pushPopup(popup, params);
}
export function replacePopout(popup, params = {}) {
return getGlobalRouter().replacePopup(popup, params);
}
export function popPageIfModalOrPopup() {
return getGlobalRouter().popPageIfModalOrPopup();
}
export function pushPageAfterPreviews(prevPage, nextPage, params = {}) {
getGlobalRouter().pushPageAfterMove(prevPage, nextPage, params);
}
export function getCurrentRoute() {
return getGlobalRouter().history.route;
}
export function getLastPanelInView(view) {
return getGlobalRouter().cache.get(view);
}
export function getPanelInView(route, view) {
if (route.view === view) {
return route.panel;
}
else {
return getLastPanelInView(view);
}
}
export function getViewHistory(route, view) {
if (route.view === view) {
return route.history;
}
else {
const panel = getPanelInView(route, view);
if (panel) {
return [panel];
}
else {
return [];
}
}
}
export function getViewProps(view, route, modal, popout) {
return {
id: view,
activePanel: getPanelInView(route, view),
history: route.hasOverlay ? [] : getViewHistory(route, view),
modal: modal,
popout: popout,
params: route.params,
onSwipeBack: popPage
};
}
export function getPanelProps(panel, route) {
return {
id: panel,
params: route.params
};
}
export function getModalProps(modal, route) {
return {
id: modal,
params: route.params
};
}
export function getPopoutProps(popout, route) {
return {
id: popout,
params: route.params
};
}