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 84c8ce41e0..2a4fbfc785 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 @@ -6,29 +6,24 @@ import { getInjectionToken } from "@ogre-tools/injectable"; import type { RequiredKeysOf } from "type-fest"; import type { Route } from "./front-end-route-injection-token"; -type InferParametersFrom = TRoute extends Route - ? TParameters - : never; - -type Parameters = TParameters extends void - ? { parameters?: undefined } - : ( - RequiredKeysOf extends never +export type NavigateWithParameterOptions = ( + TParameters extends object + ? RequiredKeysOf extends never ? { parameters?: TParameters } : { parameters: TParameters } - ); - -export type NavigateToRouteOptions = Parameters< - InferParametersFrom -> & { + : { parameters?: undefined } +); +export interface BaseNavigateToRouteOptions { query?: Record; fragment?: string; withoutAffectingBackButton?: boolean; -}; + parameters?: undefined; +} -export type NavigateToRoute = >( - route: TRoute, - options?: NavigateToRouteOptions) => void; +export interface NavigateToRoute { + (route: Route, options?: BaseNavigateToRouteOptions): void; + , Params>(route: R, options: BaseNavigateToRouteOptions & NavigateWithParameterOptions): void; +} export const navigateToRouteInjectionToken = getInjectionToken( { id: "navigate-to-route-injection-token" }, diff --git a/packages/core/src/extensions/lens-renderer-extension.ts b/packages/core/src/extensions/lens-renderer-extension.ts index 6c2c6c67b5..555fa1e3cf 100644 --- a/packages/core/src/extensions/lens-renderer-extension.ts +++ b/packages/core/src/extensions/lens-renderer-extension.ts @@ -5,6 +5,7 @@ import { Disposers, LensExtension } from "./lens-extension"; import type { Disposer } from "@k8slens/utilities"; +import { object } from "@k8slens/utilities"; import type { LensExtensionDependencies } from "./lens-extension"; import type { CatalogEntity, CategoryFilter, CatalogCategoryRegistry } from "../common/catalog"; import type { EntityFilter, CatalogEntityRegistry } from "../renderer/api/catalog/entity/registry"; @@ -20,7 +21,7 @@ import type { StatusBarRegistration } from "../renderer/components/status-bar/st import type { KubeObjectMenuRegistration } from "../renderer/components/kube-object-menu/kube-object-menu-registration"; import type { WorkloadsOverviewDetailRegistration } from "../renderer/components/workloads-overview/workloads-overview-detail-registration"; import type { KubeObjectStatusRegistration } from "../renderer/components/kube-object-status-icon/kube-object-status-registration"; -import { fromPairs, map, matches, toPairs } from "lodash/fp"; +import { fromPairs, map, matches } from "lodash/fp"; import { pipeline } from "@ogre-tools/fp"; import { getExtensionRoutePath } from "../renderer/routes/for-extension"; import type { KubeObjectHandlerRegistration } from "../renderer/kube-object/handler"; @@ -100,7 +101,7 @@ export class LensRendererExtension extends LensExtension { super(deps, extension); } - navigate(pageId?: string, params: object = {}) { + navigate(pageId?: string, params: Record = {}) { const routes = this.dependencies.routes.get(); const targetRegistration = [...this.globalPages, ...this.clusterPages] .find(registration => registration.id === (pageId || undefined)); @@ -121,8 +122,7 @@ export class LensRendererExtension extends LensExtension { registration: targetRegistration, }); const query = pipeline( - params, - toPairs, + object.entries(params), map(([key, value]) => [ key, normalizedParams[key].stringify(value), @@ -132,7 +132,6 @@ export class LensRendererExtension extends LensExtension { this.dependencies.navigateToRoute(targetRoute, { query, - parameters: {}, }); } diff --git a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts index 04818ab141..51fa868ab3 100644 --- a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts +++ b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts @@ -52,7 +52,7 @@ const convertPartialPageParamInitToFull = (key: string, value: FallthroughPagePa const convertStringToPageParamInit = ( key: string, value: string, -): PageParamInit => ({ +): PageParamInit => ({ name: key, defaultValue: value, });