diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap b/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap
index 313e438492..8dd45bbb38 100644
--- a/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap
+++ b/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap
@@ -3,7 +3,7 @@
exports[`preferences - navigation to extension specific preferences given in preferences, when rendered given extension with registered tab shows extension tab in general area 1`] = `
@@ -107,7 +107,7 @@ exports[`preferences - navigation to extension specific preferences given in pre
@@ -296,7 +296,7 @@ exports[`preferences - navigation to extension specific preferences given in pre
@@ -308,7 +308,7 @@ exports[`preferences - navigation to extension specific preferences given in pre
@@ -497,7 +497,7 @@ exports[`preferences - navigation to extension specific preferences given in pre
@@ -509,7 +509,7 @@ exports[`preferences - navigation to extension specific preferences given in pre
@@ -2247,7 +2247,7 @@ exports[`preferences - navigation to extension specific preferences when navigat
@@ -2436,7 +2436,7 @@ exports[`preferences - navigation to extension specific preferences when navigat
diff --git a/src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx b/src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx
index d158b30b73..fba614a1c3 100644
--- a/src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx
+++ b/src/behaviours/preferences/navigation-to-extension-specific-preferences.test.tsx
@@ -165,7 +165,7 @@ describe("preferences - navigation to extension specific preferences", () => {
});
it("shows extension tab in general area", () => {
- const actual = rendered.getByTestId("tab-link-for-extension-registered-tab-page-id-1-nav-item-metrics-extension-tab");
+ const actual = rendered.getByTestId("tab-link-for-extension-registered-tab-page-id-nav-item-metrics-extension-tab");
expect(actual).toMatchSnapshot();
});
@@ -178,7 +178,7 @@ describe("preferences - navigation to extension specific preferences", () => {
describe("when navigating to specific extension tab", () => {
beforeEach(() => {
- applicationBuilder.preferences.navigation.click("extension-registered-tab-page-id-1-nav-item-metrics-extension-tab");
+ applicationBuilder.preferences.navigation.click("extension-registered-tab-page-id-nav-item-metrics-extension-tab");
});
it("renders", () => {
expect(rendered.container).toMatchSnapshot();
@@ -205,8 +205,8 @@ describe("preferences - navigation to extension specific preferences", () => {
});
it("shows each of registered tabs in general area", () => {
- const helloTab = rendered.getByTestId("tab-link-for-extension-hello-world-tab-page-id-1-nav-item-hello-extension-tab");
- const logsTab = rendered.getByTestId("tab-link-for-extension-hello-world-tab-page-id-1-nav-item-logs-extension-tab");
+ const helloTab = rendered.getByTestId("tab-link-for-extension-hello-world-tab-page-id-nav-item-hello-extension-tab");
+ const logsTab = rendered.getByTestId("tab-link-for-extension-hello-world-tab-page-id-nav-item-logs-extension-tab");
expect(helloTab).toBeInTheDocument();
expect(logsTab).toBeInTheDocument();
@@ -223,20 +223,20 @@ describe("preferences - navigation to extension specific preferences", () => {
});
it("shows tab from the first extension", () => {
- const actual = rendered.getByTestId("tab-link-for-extension-registered-tab-page-id-1-nav-item-metrics-extension-tab");
+ const actual = rendered.getByTestId("tab-link-for-extension-registered-tab-page-id-nav-item-metrics-extension-tab");
expect(actual).toBeInTheDocument();
});
it("shows tab from the second extension", () => {
- const actual = rendered.getByTestId("tab-link-for-extension-duplicated-tab-page-id-1-nav-item-metrics-extension-tab");
+ const actual = rendered.getByTestId("tab-link-for-extension-duplicated-tab-page-id-nav-item-metrics-extension-tab");
expect(actual).toBeInTheDocument();
});
describe("when navigating to first extension tab", () => {
beforeEach(() => {
- applicationBuilder.preferences.navigation.click("extension-registered-tab-page-id-1-nav-item-metrics-extension-tab");
+ applicationBuilder.preferences.navigation.click("extension-registered-tab-page-id-nav-item-metrics-extension-tab");
});
it("renders", () => {
@@ -258,7 +258,7 @@ describe("preferences - navigation to extension specific preferences", () => {
describe("when navigating to second extension tab", () => {
beforeEach(() => {
- applicationBuilder.preferences.navigation.click("extension-duplicated-tab-page-id-1-nav-item-metrics-extension-tab");
+ applicationBuilder.preferences.navigation.click("extension-duplicated-tab-page-id-nav-item-metrics-extension-tab");
});
it("renders", () => {
diff --git a/src/renderer/components/+preferences/__tests__/extensions.test.tsx b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
index ffa2917853..6710cd9358 100644
--- a/src/renderer/components/+preferences/__tests__/extensions.test.tsx
+++ b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
@@ -11,8 +11,8 @@ import { type DiRender, renderFor } from "../../test-utils/renderFor";
import { Extensions } from "../extensions";
import rendererExtensionsInjectable from "../../../../extensions/renderer-extensions.injectable";
import { computed } from "mobx";
-import currentPathParametersInjectable from "../../../routes/current-path-parameters.injectable";
import { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
+import routePathParametersInjectable from "../../../routes/route-path-parameters.injectable";
class SomeTestExtension extends LensRendererExtension {
constructor() {
@@ -87,7 +87,7 @@ describe("", () => {
render = renderFor(di);
di.override(rendererExtensionsInjectable, () => computed(() => [new SomeTestExtension()]));
- di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id" })));
+ di.override(routePathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id" })));
});
it("renders", () => {
@@ -116,7 +116,7 @@ describe("", () => {
describe("when tabId param is passed and extension has same showInPreferencesTab param", () => {
beforeEach(() => {
- di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id", tabId: "metircs-extension-tab" })));
+ di.override(routePathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id", tabId: "metircs-extension-tab" })));
});
it("does render related preferences for specific tab", () => {
diff --git a/src/renderer/components/+preferences/extension-preference-item-registrator.injectable.ts b/src/renderer/components/+preferences/extension-preference-item-registrator.injectable.ts
index 10d385388f..8182cfd2af 100644
--- a/src/renderer/components/+preferences/extension-preference-item-registrator.injectable.ts
+++ b/src/renderer/components/+preferences/extension-preference-item-registrator.injectable.ts
@@ -34,6 +34,7 @@ const extensionPreferenceItemRegistratorInjectable = getInjectable({
instantiate: () => ({
id: registration.id || id,
title: registration.title,
+ extension,
components: {
Hint: registration.components.Hint,
diff --git a/src/renderer/components/+preferences/extension-preference-model.injectable.ts b/src/renderer/components/+preferences/extension-preference-model.injectable.ts
index 784669a0a2..9ac7df82a1 100644
--- a/src/renderer/components/+preferences/extension-preference-model.injectable.ts
+++ b/src/renderer/components/+preferences/extension-preference-model.injectable.ts
@@ -4,15 +4,17 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx";
+import extensionPreferencesRouteInjectable from "../../../common/front-end-routing/routes/preferences/extension/extension-preferences-route.injectable";
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable";
-import currentPathParametersInjectable from "../../routes/current-path-parameters.injectable";
+import routePathParametersInjectable from "../../routes/route-path-parameters.injectable";
import { getExtensionPreferenceItems } from "./get-extension-preference-items";
const extensionPreferencesModelInjectable = getInjectable({
id: "extension-preferences-model",
instantiate: (di) => {
- const pathParameters = di.inject(currentPathParametersInjectable);
+ const route = di.inject(extensionPreferencesRouteInjectable);
+ const pathParameters = di.inject(routePathParametersInjectable, route);
const extensions = di.inject(rendererExtensionsInjectable);
return computed(() => {
diff --git a/src/renderer/components/+preferences/preferences-navigation/extension-tab-preferences-navigation-item.injectable.ts b/src/renderer/components/+preferences/preferences-navigation/extension-tab-preferences-navigation-item.injectable.ts
index f5eca9d8ff..6397b3d538 100644
--- a/src/renderer/components/+preferences/preferences-navigation/extension-tab-preferences-navigation-item.injectable.ts
+++ b/src/renderer/components/+preferences/preferences-navigation/extension-tab-preferences-navigation-item.injectable.ts
@@ -13,28 +13,28 @@ import type { LensRendererExtension } from "../../../../extensions/lens-renderer
import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token";
import { pipeline } from "@ogre-tools/fp";
import extensionPreferencesRouteInjectable from "../../../../common/front-end-routing/routes/preferences/extension/extension-preferences-route.injectable";
-import currentPathParametersInjectable from "../../../routes/current-path-parameters.injectable";
import navigateToExtensionPreferencesInjectable from "../../../../common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable";
import type { LensExtension } from "../../../../extensions/lens-extension";
+import routePathParametersInjectable from "../../../routes/route-path-parameters.injectable";
const extensionSpecificTabNavigationItemRegistratorInjectable = getInjectable({
id: "extension-specific-tab-preferences-navigation-items",
instantiate: (di) => {
- return (ext: LensExtension, extensionInstallationCount) => {
+ return (ext: LensExtension) => {
const extension = ext as LensRendererExtension;
const navigateToExtensionPreferences = di.inject(
navigateToExtensionPreferencesInjectable,
);
const route = di.inject(extensionPreferencesRouteInjectable);
const routeIsActive = di.inject(routeIsActiveInjectable, route);
- const pathParameters = di.inject(currentPathParametersInjectable);
+ const pathParameters = di.inject(routePathParametersInjectable, route);
- const injectables = pipeline(
+ return pipeline(
extension.appPreferenceTabs,
map((tab) => {
- const id = `extension-${extension.sanitizedExtensionId}-${extensionInstallationCount}-nav-item-${tab.id}`;
+ const id = `extension-${extension.sanitizedExtensionId}-nav-item-${tab.id}`;
const isActive = computed(() => routeIsActive.get() && pathParameters.get().tabId === tab.id);
return getInjectable({
@@ -51,10 +51,6 @@ const extensionSpecificTabNavigationItemRegistratorInjectable = getInjectable({
});
}),
);
-
- di.register(...injectables);
-
- return;
};
},
injectionToken: extensionRegistratorInjectionToken,
diff --git a/src/renderer/components/+preferences/preferences-navigation/extensions-preferences-navigation-item-registrator.injectable.ts b/src/renderer/components/+preferences/preferences-navigation/extensions-preferences-navigation-item-registrator.injectable.ts
index 8a6f00726d..bdbcba7c98 100644
--- a/src/renderer/components/+preferences/preferences-navigation/extensions-preferences-navigation-item-registrator.injectable.ts
+++ b/src/renderer/components/+preferences/preferences-navigation/extensions-preferences-navigation-item-registrator.injectable.ts
@@ -8,32 +8,34 @@ import extensionPreferencesRouteInjectable from "../../../../common/front-end-ro
import navigateToExtensionPreferencesInjectable from "../../../../common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable";
import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token";
import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
-import currentPathParametersInjectable from "../../../routes/current-path-parameters.injectable";
import routeIsActiveInjectable from "../../../routes/route-is-active.injectable";
+import routePathParametersInjectable from "../../../routes/route-path-parameters.injectable";
import { preferenceNavigationItemInjectionToken } from "./preference-navigation-items.injectable";
const extensionPreferencesNavigationItemRegistratorInjectable = getInjectable({
id: "extension-preferences-navigation-item",
instantiate: (di) => {
- return (ext, extensionInstallationCount) => {
+ return (ext) => {
const extension = ext as LensRendererExtension;
const navigateToExtensionPreferences = di.inject(
navigateToExtensionPreferencesInjectable,
);
+
const extensionHasPreferences = extension.appPreferences.length > 0;
const extensionHasGeneralPreferences = extension.appPreferences.some(preferences =>
!preferences.showInPreferencesTab,
);
const isVisible = computed(() => extensionHasPreferences && extensionHasGeneralPreferences);
const extensionRoute = di.inject(extensionPreferencesRouteInjectable);
- const pathParameters = di.inject(currentPathParametersInjectable);
+ const pathParameters = di.inject(routePathParametersInjectable, extensionRoute);
const routeIsActive = di.inject(routeIsActiveInjectable, extensionRoute);
-
const isActive = computed(() => routeIsActive.get() && pathParameters.get().extensionId === extension.sanitizedExtensionId);
+ const id = `extension-preferences-navigation-item-${extension.sanitizedExtensionId}`;
- const extensionInjectable = getInjectable({
- id: `extension-preferences-navigation-item-${extension.sanitizedExtensionId}-${extensionInstallationCount}`,
+ const injectable = getInjectable({
+ id,
+ injectionToken: preferenceNavigationItemInjectionToken,
instantiate: () => ({
id: `extension-${extension.sanitizedExtensionId}`,
label: `${extension.name}`,
@@ -43,10 +45,9 @@ const extensionPreferencesNavigationItemRegistratorInjectable = getInjectable({
orderNumber: 20,
fromExtension: true,
}),
- injectionToken: preferenceNavigationItemInjectionToken,
});
- di.register(extensionInjectable);
+ return [injectable];
};
},