mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
feat: Improve typing of NavigateToRoute
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
cd62e9a2e8
commit
d1a659bf74
@ -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> = (
|
||||
TParameters extends object
|
||||
? RequiredKeysOf<TParameters> extends never
|
||||
? { parameters?: TParameters }
|
||||
: { parameters: TParameters }
|
||||
export type NavigateWithParameterOptions<TParameters extends object> = (
|
||||
HasRequiredKeys<TParameters> extends true
|
||||
? { parameters: TParameters }
|
||||
: { parameters?: TParameters }
|
||||
);
|
||||
|
||||
export type NavigateWithParameterOptionsForRoute<TRoute> = (
|
||||
TRoute extends Route<infer Params extends object>
|
||||
? NavigateWithParameterOptions<Params>
|
||||
: { parameters?: undefined }
|
||||
);
|
||||
|
||||
export interface BaseNavigateToRouteOptions {
|
||||
query?: Record<string, string>;
|
||||
fragment?: string;
|
||||
withoutAffectingBackButton?: boolean;
|
||||
parameters?: undefined;
|
||||
}
|
||||
|
||||
export type NavigateToRouteOptions<TRoute> = (
|
||||
TRoute extends Route<void>
|
||||
? ([] | [options: BaseNavigateToRouteOptions])
|
||||
: TRoute extends Route<infer Params extends object>
|
||||
? HasRequiredKeys<Params> extends true
|
||||
? [options: BaseNavigateToRouteOptions & { parameters: Params }]
|
||||
: ([] | [options: BaseNavigateToRouteOptions & { parameters?: Params }])
|
||||
: ([] | [options: BaseNavigateToRouteOptions])
|
||||
);
|
||||
|
||||
export interface NavigateToRoute {
|
||||
(route: Route<void>, options?: BaseNavigateToRouteOptions): void;
|
||||
<R extends Route<Params>, Params>(route: R, options: BaseNavigateToRouteOptions & NavigateWithParameterOptions<Params>): void;
|
||||
<Route>(route: Route, ...options: NavigateToRouteOptions<Route>): void;
|
||||
}
|
||||
|
||||
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user