mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix actual application and typings
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
450ac378e1
commit
c2aa186d16
@ -75,7 +75,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("does not have path parameters", () => {
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable, route);
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable)(route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({});
|
||||
});
|
||||
@ -116,7 +116,10 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
describe("when navigating to route with path parameters", () => {
|
||||
let route: Route<any>;
|
||||
let route: Route<{
|
||||
someParameter?: string | undefined;
|
||||
someOtherParameter?: string | undefined;
|
||||
}>;
|
||||
|
||||
beforeEach(() => {
|
||||
route = windowDi.inject(routeWithOptionalPathParametersInjectable);
|
||||
@ -150,7 +153,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("knows path parameters", () => {
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable, route);
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable)(route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({
|
||||
someParameter: "some-value",
|
||||
@ -160,7 +163,10 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
describe("when navigating to route without path parameters", () => {
|
||||
let route: Route<any>;
|
||||
let route: Route<{
|
||||
someParameter?: string | undefined;
|
||||
someOtherParameter?: string | undefined;
|
||||
}>;
|
||||
|
||||
beforeEach(() => {
|
||||
route = windowDi.inject(routeWithOptionalPathParametersInjectable);
|
||||
@ -183,7 +189,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("knows path parameters", () => {
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable, route);
|
||||
const pathParameters = windowDi.inject(routePathParametersInjectable)(route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({
|
||||
someParameter: undefined,
|
||||
@ -232,7 +238,7 @@ const routeWithOptionalPathParametersComponentInjectable = getInjectable({
|
||||
|
||||
instantiate: (di) => {
|
||||
const route = di.inject(routeWithOptionalPathParametersInjectable);
|
||||
const pathParameters = di.inject(routePathParametersInjectable, route);
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
route,
|
||||
|
||||
@ -15,8 +15,8 @@ const catalogRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
group: computed(() => pathParameters.get().group),
|
||||
kind: computed(() => pathParameters.get().kind),
|
||||
group: computed(() => pathParameters.get()?.group),
|
||||
kind: computed(() => pathParameters.get()?.kind),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -15,8 +15,8 @@ const customResourcesRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
group: computed(() => pathParameters.get().group),
|
||||
name: computed(() => pathParameters.get().name),
|
||||
group: computed(() => pathParameters.get()?.group),
|
||||
name: computed(() => pathParameters.get()?.name),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -24,7 +24,7 @@ const sidebarItemsForDefinitionGroupsInjectable = getInjectable({
|
||||
const crdRoute = di.inject(customResourcesRouteInjectable);
|
||||
const crdRouteIsActive = di.inject(routeIsActiveInjectable, crdRoute);
|
||||
const crdListRoute = di.inject(crdListRouteInjectable);
|
||||
const pathParameters = di.inject(routePathParametersInjectable, crdRoute);
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(crdRoute);
|
||||
const navigateToCustomResources = di.inject(navigateToCustomResourcesInjectable);
|
||||
|
||||
return computed((): SidebarItemRegistration[] => {
|
||||
@ -51,9 +51,15 @@ const sidebarItemsForDefinitionGroupsInjectable = getInjectable({
|
||||
onClick: () => navigateToCustomResources(crdPathParameters),
|
||||
|
||||
isActive: computed(
|
||||
() =>
|
||||
crdRouteIsActive.get() &&
|
||||
matches(crdPathParameters, pathParameters.get()),
|
||||
() => {
|
||||
const params = pathParameters.get();
|
||||
|
||||
if (!crdRouteIsActive.get() || !params) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return matches(crdPathParameters, params);
|
||||
},
|
||||
),
|
||||
|
||||
isVisible: crdListRoute.isEnabled,
|
||||
|
||||
@ -15,7 +15,7 @@ const entitySettingsRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
entityId: computed(() => pathParameters.get().entityId),
|
||||
entityId: computed(() => pathParameters.get()?.entityId),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -15,8 +15,8 @@ const helmChartsRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
chartName: computed(() => pathParameters.get().chartName),
|
||||
repo: computed(() => pathParameters.get().repo),
|
||||
chartName: computed(() => pathParameters.get()?.chartName),
|
||||
repo: computed(() => pathParameters.get()?.repo),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -15,8 +15,8 @@ const helmReleasesRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
namespace: computed(() => pathParameters.get().namespace),
|
||||
name: computed(() => pathParameters.get().name),
|
||||
namespace: computed(() => pathParameters.get()?.namespace),
|
||||
name: computed(() => pathParameters.get()?.name),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -15,7 +15,7 @@ const portForwardsRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
forwardport: computed(() => pathParameters.get().forwardport),
|
||||
forwardport: computed(() => pathParameters.get()?.forwardport),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -7,14 +7,14 @@ import getClusterByIdInjectable from "../../../common/cluster/get-by-id.injectab
|
||||
import loggerInjectable from "../../../common/logger.injectable";
|
||||
import sendSetVisibleClusterInjectable from "../../cluster/send-set-visible.injectable";
|
||||
import { ClusterFrameHandler } from "./cluster-frame-handler";
|
||||
import clusterFrameParentElementInjectable from "./parent-element.injectable";
|
||||
import getElementByIdInjectable from "./get-element-by-id.injectable";
|
||||
|
||||
const clusterFrameHandlerInjectable = getInjectable({
|
||||
id: "cluster-frame-handler",
|
||||
instantiate: (di) => new ClusterFrameHandler({
|
||||
getClusterById: di.inject(getClusterByIdInjectable),
|
||||
sendSetVisibleCluster: di.inject(sendSetVisibleClusterInjectable),
|
||||
parentElem: di.inject(clusterFrameParentElementInjectable),
|
||||
getElementById: di.inject(getElementByIdInjectable),
|
||||
logger: di.inject(loggerInjectable),
|
||||
}),
|
||||
});
|
||||
|
||||
@ -11,6 +11,7 @@ import assert from "assert";
|
||||
import type { GetClusterById } from "../../../common/cluster/get-by-id.injectable";
|
||||
import type { SendSetVisibleCluster } from "../../cluster/send-set-visible.injectable";
|
||||
import type { Logger } from "../../../common/logger";
|
||||
import type { GetElementById } from "./get-element-by-id.injectable";
|
||||
|
||||
export interface LensView {
|
||||
isLoaded: boolean;
|
||||
@ -20,7 +21,7 @@ export interface LensView {
|
||||
export interface ClusterFrameHandlerDependencies {
|
||||
getClusterById: GetClusterById;
|
||||
sendSetVisibleCluster: SendSetVisibleCluster;
|
||||
readonly parentElem: HTMLElement;
|
||||
getElementById: GetElementById;
|
||||
readonly logger: Logger;
|
||||
}
|
||||
|
||||
@ -38,6 +39,7 @@ export class ClusterFrameHandler {
|
||||
@action
|
||||
public initView(clusterId: ClusterId) {
|
||||
const cluster = this.dependencies.getClusterById(clusterId);
|
||||
const parentElem = this.dependencies.getElementById("lens-views");
|
||||
|
||||
if (!cluster || this.views.has(clusterId)) {
|
||||
return;
|
||||
@ -57,7 +59,7 @@ export class ClusterFrameHandler {
|
||||
view.isLoaded = true;
|
||||
}), { once: true });
|
||||
this.views.set(clusterId, { frame: iframe, isLoaded: false });
|
||||
this.dependencies.parentElem.appendChild(iframe);
|
||||
parentElem.appendChild(iframe);
|
||||
|
||||
this.dependencies.logger.info(`[LENS-VIEW]: waiting cluster to be ready, clusterId=${clusterId}`);
|
||||
|
||||
@ -79,7 +81,7 @@ export class ClusterFrameHandler {
|
||||
() => {
|
||||
this.dependencies.logger.info(`[LENS-VIEW]: remove dashboard, clusterId=${clusterId}`);
|
||||
this.views.delete(clusterId);
|
||||
this.dependencies.parentElem.removeChild(iframe);
|
||||
parentElem.removeChild(iframe);
|
||||
dispose();
|
||||
},
|
||||
);
|
||||
|
||||
@ -15,7 +15,7 @@ const clusterViewRouteParametersInjectable = getInjectable({
|
||||
const pathParameters = di.inject(routePathParametersInjectable)(route);
|
||||
|
||||
return {
|
||||
clusterId: computed(() => pathParameters.get().clusterId),
|
||||
clusterId: computed(() => pathParameters.get()?.clusterId),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
|
||||
export type GetElementById = (id: string) => HTMLElement;
|
||||
|
||||
const getElementByIdInjectable = getInjectable({
|
||||
id: "get-element-by-id",
|
||||
instantiate: (): GetElementById => (id) => {
|
||||
const element = document.getElementById(id);
|
||||
|
||||
if (!element) {
|
||||
throw new Error(`Failed to find element: ${id}`);
|
||||
}
|
||||
|
||||
return element;
|
||||
},
|
||||
causesSideEffects: true,
|
||||
});
|
||||
|
||||
export default getElementByIdInjectable;
|
||||
@ -1,20 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import assert from "assert";
|
||||
|
||||
const clusterFrameParentElementInjectable = getInjectable({
|
||||
id: "cluster-frame-parent-element",
|
||||
instantiate: () => {
|
||||
const elem = document.getElementById("#lens-view");
|
||||
|
||||
assert(elem, "DOM with #lens-views must be present");
|
||||
|
||||
return elem;
|
||||
},
|
||||
causesSideEffects: true,
|
||||
});
|
||||
|
||||
export default clusterFrameParentElementInjectable;
|
||||
@ -65,7 +65,8 @@ import setupSystemCaInjectable from "./frames/root-frame/setup-system-ca.injecta
|
||||
import extensionShouldBeEnabledForClusterFrameInjectable from "./extension-loader/extension-should-be-enabled-for-cluster-frame.injectable";
|
||||
import { asyncComputed } from "@ogre-tools/injectable-react";
|
||||
import forceUpdateModalRootFrameComponentInjectable from "./application-update/force-update-modal/force-update-modal-root-frame-component.injectable";
|
||||
import clusterFrameParentElementInjectable from "./components/cluster-manager/parent-element.injectable";
|
||||
import getElementByIdInjectable from "./components/cluster-manager/get-element-by-id.injectable";
|
||||
import { getOrInsertWith } from "./utils";
|
||||
import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable";
|
||||
import getEntitySettingCommandsInjectable from "./components/command-palette/registered-commands/get-entity-setting-commands.injectable";
|
||||
import storageSaveDelayInjectable from "./utils/create-storage/storage-save-delay.injectable";
|
||||
@ -109,7 +110,11 @@ export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {})
|
||||
|
||||
di.override(terminalSpawningPoolInjectable, () => document.createElement("div"));
|
||||
di.override(hostedClusterIdInjectable, () => undefined);
|
||||
di.override(clusterFrameParentElementInjectable, () => document.createElement("div"));
|
||||
di.override(getElementByIdInjectable, () => {
|
||||
const elements = new Map<string, HTMLElement>();
|
||||
|
||||
return (id) => getOrInsertWith(elements, id, () => document.createElement("div"));
|
||||
});
|
||||
|
||||
di.override(getAbsolutePathInjectable, () => getAbsolutePathFake);
|
||||
di.override(joinPathsInjectable, () => joinPathsFake);
|
||||
|
||||
@ -15,15 +15,15 @@ const routePathParametersInjectable = getInjectable({
|
||||
|
||||
instantiate: (di) => {
|
||||
const currentPath = di.inject(currentPathInjectable);
|
||||
const pathParametersCache = new Map<Route<unknown>, IComputedValue<Partial<Record<string, string>>>>();
|
||||
const pathParametersCache = new Map<Route<unknown>, IComputedValue<unknown>>();
|
||||
|
||||
return <Param>(route: Route<Param>): IComputedValue<Partial<Param>> => (
|
||||
return <Param>(route: Route<Param>): IComputedValue<Param | null> => (
|
||||
getOrInsertWith(pathParametersCache, route, () => computed(() => (
|
||||
matchPath(currentPath.get(), {
|
||||
matchPath<Param>(currentPath.get(), {
|
||||
path: route.path,
|
||||
exact: true,
|
||||
})?.params ?? {}
|
||||
)))
|
||||
})?.params ?? null
|
||||
))) as IComputedValue<Param | null>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user