UNPKG

magner

Version:

Universal admin panel magnetic to any backend

68 lines (53 loc) 2.38 kB
import type { RouteComponent, _RouteRecordBase } from 'vue-router'; import type { RoutePreset } from './routing-presets'; import type { RouteLayout } from './layouts'; export type RouteTypes = 'custom' | 'preset' | 'layout'; /** Restricts access to the route. Possible cases: * `false` or `undefined` – no auth checking is performed before entering the route. * `true` – allows entering the route to authenticated users * `string[]` – allows access to the authenticated users with roles listed in the array */ export type RouteAccessRestriction = string[] | boolean; export interface GlobalRouting { /** Optional base to provide. Gives an url of `https://example.com/BASE/ */ suffixUrl?: string, /** Name of the route to which should we redirect unauthenticated user from protected route */ homeNoAuthName: string, /** Name of the route to which should we redirect authenticated user from unprotected route */ homeHasAuthName: string, } export interface Route extends _RouteRecordBase { /** Route path. Refer to the Vue Router docs */ path: string, /** Route unique name. Refer to the Vue Router docs */ name: string, props?: Record<string, unknown>, /** Who can access the route */ roles?: RouteAccessRestriction, /** Load Vue component to display as a page */ component?: RouteComponent | (() => Promise<RouteComponent>), } export interface RouteBase { type: RouteTypes, } export interface RouteCustom<ROUTE extends Route = Route> extends RouteBase { type: 'custom', route: ROUTE, } /** Magner route, a wrapper around the Vue route */ export type FinalRoute<ROUTE extends Route = Route> = | RouteCustom<ROUTE> | RoutePreset<ROUTE> | RouteLayout; export type FinalNoLayoutRoute<ROUTE extends Route = Route> = | RouteCustom<ROUTE> | RoutePreset<ROUTE>; /** Magner routing configuration */ export interface RoutingConfig { /** Array of Magner routes. It could be one of 3 types: * * 'custom' – custom route with your own Vue template * * 'preset' – route with configuration, defining the page. Could be 'login', 'table', 'card' etc. * * 'group – an array of routes. Influences only the sidebar menu creating nested levels of navigation */ routes: FinalRoute[], /** Global routing configuration that defines special needs in routing like programmatic navigation */ global: GlobalRouting, }