diff --git a/packages/core/src/common/front-end-routing/navigate-to-route-injection-token.ts b/packages/core/src/common/front-end-routing/navigate-to-route-injection-token.ts index 2a4fbfc785..365c089400 100644 --- a/packages/core/src/common/front-end-routing/navigate-to-route-injection-token.ts +++ b/packages/core/src/common/front-end-routing/navigate-to-route-injection-token.ts @@ -3,26 +3,39 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectionToken } from "@ogre-tools/injectable"; -import type { RequiredKeysOf } from "type-fest"; +import type { HasRequiredKeys } from "type-fest"; import type { Route } from "./front-end-route-injection-token"; -export type NavigateWithParameterOptions = ( - TParameters extends object - ? RequiredKeysOf extends never - ? { parameters?: TParameters } - : { parameters: TParameters } +export type NavigateWithParameterOptions = ( + HasRequiredKeys extends true + ? { parameters: TParameters } + : { parameters?: TParameters } +); + +export type NavigateWithParameterOptionsForRoute = ( + TRoute extends Route + ? NavigateWithParameterOptions : { parameters?: undefined } ); + export interface BaseNavigateToRouteOptions { query?: Record; fragment?: string; withoutAffectingBackButton?: boolean; - parameters?: undefined; } +export type NavigateToRouteOptions = ( + TRoute extends Route + ? ([] | [options: BaseNavigateToRouteOptions]) + : TRoute extends Route + ? HasRequiredKeys extends true + ? [options: BaseNavigateToRouteOptions & { parameters: Params }] + : ([] | [options: BaseNavigateToRouteOptions & { parameters?: Params }]) + : ([] | [options: BaseNavigateToRouteOptions]) +); + export interface NavigateToRoute { - (route: Route, options?: BaseNavigateToRouteOptions): void; - , Params>(route: R, options: BaseNavigateToRouteOptions & NavigateWithParameterOptions): void; + (route: Route, ...options: NavigateToRouteOptions): void; } export const navigateToRouteInjectionToken = getInjectionToken(