import { type ISearchParamsParser } from '../../SearchParamsParser'; import { type NavigateOptions, type RouteConfig, type RouteCreatorParams, type SearchParams } from '../../types'; type RouteNavigateOptions = NavigateOptions; type RouteParams = Parameters>[0]; type RouteNavigate = RouteParams extends never ? (options?: RouteNavigateOptions) => void : (options: { params: Parameters>[0]; } & RouteNavigateOptions) => void; type RouteNavigateAsync = RouteParams extends never ? (options?: RouteNavigateOptions) => PromiseLike : (options: { params: Parameters>[0]; } & RouteNavigateOptions) => PromiseLike; export type GenerateHrefOptions = { searchParams?: SearchParams; }; type GenerateHref = RouteParams extends never ? (options?: GenerateHrefOptions) => string : (params: RouteParams, options?: GenerateHrefOptions) => string; /** * Описывает маршрут приложения и позволяет типобезопасно делать переходы и генерировать ссылки */ export declare class Route { private readonly _params; private readonly _config; private readonly _parser; readonly pattern: TRouteConfig['pattern']; constructor(_params: RouteCreatorParams, _config: TRouteConfig, _parser: ISearchParamsParser); /** * Является ли route активным. * Observable * * @example * ```typescript * import { makeAutoObservable } from 'mobx'; * * class SidebarStore { * constructor(private readonly _router: Router) { * makeAutoObservable(this); * } * * get isUserRouteActive() { * return this._router.routes.user.isActive; * } * } * ``` */ get isActive(): boolean; /** * Типизированные под конкретный route параметры пути. * Параметры для перехода задаются в generatePath при вызове defineRoute. * Если route не активен, то равен undefined * @example * ```ts * const router = new Router(provider, { * user: Router.defineRoute({ * pattern: '/user/:id', * generatePath: (params: { id: string }) => `/user/${params.id}`, * }), * }); * * router.routes.user.routeParams; // { id: '123' } * * // id будет обязательным для перехода * router.routes.user.navigate({ params: { id: '123' } }); * // Ошибка типизации. id должен быть строкой * router.routes.user.navigate({ params: { id: 123 } }); * ``` */ get routeParams(): RouteParams | undefined; /** * Позволяет переходить на конкретный route. Учитывает необходимые параметры для перехода (routeParams). * Параметры для перехода задаются в generatePath при вызове defineRoute * @example * ```ts * const router = new Router(provider, { * requests: Router.defineRoute({ * pattern: '/requests/:orgId', * generatePath: (params: { orgId: string }) => `/requests/${params.orgId}`, * }), * }); * * router.routes.requests.navigate({ params: { orgId: '123' } }); * ``` */ navigate: RouteNavigate; /** * Асинхронный переход на конкретный route. Учитывает необходимые параметры для перехода (routeParams). * Параметры для перехода задаются в `generatePath` при вызове `defineRoute`. * Возвращает Promise, который можно использовать с `await`. * * @example * ```ts * const router = new Router(provider, { * requests: Router.defineRoute({ * pattern: '/requests/:orgId', * generatePath: (params: { orgId: string }) => `/requests/${params.orgId}`, * }), * }); * * // Асинхронный переход * await router.routes.requests.navigateAsync({ params: { orgId: '123' } }); * ``` * * @param options - Объект с параметрами для генерации пути и опциями навигации. * Если маршрут требует параметры пути, они обязательны. * @returns Promise - Promise, который резолвится после выполнения навигации. */ navigateAsync: RouteNavigateAsync; /** * Генерирует путь, который можно вставить в ссылку * @example * ```tsx * * ``` */ generateHref: GenerateHref; /** * Сопоставляет путь с текущим маршрутом * @example * ```ts * const info = router.routes.requests.matchPath('/requests/123'); * // info?.params будет: { orgId: '123' } * ``` */ matchPath: (path: string) => import("../../types").MatchPathInfo | null; } export {};