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 425728241d..9b704d86b2 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 @@ -145,31 +145,6 @@ exports[`preferences - navigation to extension specific preferences given in pre
-
-
- Test preference item - -
-
-
-
-
-
-
{ }); it("doesn't show preferences from unrelated extension", () => { - const actual = rendered.getByTestId("extension-preference-item-for-some-other-preference-item-id"); + const actual = rendered.queryByTestId("extension-preference-item-for-some-other-preference-item-id"); expect(actual).toBeNull(); }); diff --git a/src/renderer/components/+preferences/extension-preference-items.injectable.ts b/src/renderer/components/+preferences/extension-preference-items.injectable.ts index f4d08304d2..68d66ffb0a 100644 --- a/src/renderer/components/+preferences/extension-preference-items.injectable.ts +++ b/src/renderer/components/+preferences/extension-preference-items.injectable.ts @@ -2,49 +2,35 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { pipeline } from "@ogre-tools/fp"; -import { getInjectable, getInjectionToken } from "@ogre-tools/injectable"; -import { filter, overSome } from "lodash/fp"; +import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; +import type { IComputedValue } from "mobx"; import { computed } from "mobx"; + import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; -import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; + import type { RegisteredAppPreference } from "./app-preferences/app-preference-registration"; -interface ExtensionPreferenceItem extends RegisteredAppPreference { - extension: LensRendererExtension; -} - -export const extensionPreferenceItemInjectionToken = getInjectionToken({ - id: "extension-preference-item-injection-token", -}); - const extensionsPreferenceItemsInjectable = getInjectable({ id: "extension-preference-items", - instantiate: (di) => { + instantiate: (di, extensionId: string): IComputedValue => { const extensions = di.inject(rendererExtensionsInjectable); + const extension = extensions.get().find((extension) => extension.id === extensionId); return computed(() => { - const enabledExtensions = extensions.get(); + if (!extension) { + return []; + } - return pipeline( - di.injectMany(extensionPreferenceItemInjectionToken), - - filter((item) => - overSome([ - isNonExtensionItem, - isEnabledExtensionItemFor(enabledExtensions), - ])(item), - ), - ); + return extension.appPreferences + .filter(preference => !preference.showInPreferencesTab) + .map(preference => ({ + id: preference.id, + ...preference, + })); }); }, + lifecycle: lifecycleEnum.transient, }); -const isNonExtensionItem = (item: ExtensionPreferenceItem) => !item.extension; - -const isEnabledExtensionItemFor = - (enabledExtensions: LensRendererExtension[]) => (item: ExtensionPreferenceItem) => - !!enabledExtensions.find((extension) => extension === item.extension); - export default extensionsPreferenceItemsInjectable; diff --git a/src/renderer/components/+preferences/extensions.tsx b/src/renderer/components/+preferences/extensions.tsx index 930b74c8ee..3bc4bc20e5 100644 --- a/src/renderer/components/+preferences/extensions.tsx +++ b/src/renderer/components/+preferences/extensions.tsx @@ -11,6 +11,7 @@ import type { RegisteredAppPreference } from "./app-preferences/app-preference-r import { ExtensionSettings } from "./extension-settings"; import { Preferences } from "./preferences"; import extensionsPreferenceItemsInjectable from "./extension-preference-items.injectable"; +import currentPathParametersInjectable from "../../routes/current-path-parameters.injectable"; interface Dependencies { preferenceItems: IComputedValue; @@ -36,8 +37,13 @@ export const Extensions = withInjectables( observer(NonInjectedExtensions), { - getProps: (di) => ({ - preferenceItems: di.inject(extensionsPreferenceItemsInjectable), - }), + getProps: (di) => { + const pathParameters = di.inject(currentPathParametersInjectable); + const extensionId = pathParameters.get().extensionId; + + return { + preferenceItems: di.inject(extensionsPreferenceItemsInjectable, extensionId), + }; + }, }, );