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.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
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";
|
import type { Route } from "./front-end-route-injection-token";
|
||||||
|
|
||||||
export type NavigateWithParameterOptions<TParameters> = (
|
export type NavigateWithParameterOptions<TParameters extends object> = (
|
||||||
TParameters extends object
|
HasRequiredKeys<TParameters> extends true
|
||||||
? RequiredKeysOf<TParameters> extends never
|
? { parameters: TParameters }
|
||||||
? { parameters?: TParameters }
|
: { parameters?: TParameters }
|
||||||
: { parameters: TParameters }
|
);
|
||||||
|
|
||||||
|
export type NavigateWithParameterOptionsForRoute<TRoute> = (
|
||||||
|
TRoute extends Route<infer Params extends object>
|
||||||
|
? NavigateWithParameterOptions<Params>
|
||||||
: { parameters?: undefined }
|
: { parameters?: undefined }
|
||||||
);
|
);
|
||||||
|
|
||||||
export interface BaseNavigateToRouteOptions {
|
export interface BaseNavigateToRouteOptions {
|
||||||
query?: Record<string, string>;
|
query?: Record<string, string>;
|
||||||
fragment?: string;
|
fragment?: string;
|
||||||
withoutAffectingBackButton?: boolean;
|
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 {
|
export interface NavigateToRoute {
|
||||||
(route: Route<void>, options?: BaseNavigateToRouteOptions): void;
|
<Route>(route: Route, ...options: NavigateToRouteOptions<Route>): void;
|
||||||
<R extends Route<Params>, Params>(route: R, options: BaseNavigateToRouteOptions & NavigateWithParameterOptions<Params>): void;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
|
export const navigateToRouteInjectionToken = getInjectionToken<NavigateToRoute>(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user