From 4bb6ef15396d3412aa0a1effaf272f043a7a06dc Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 17 Jun 2022 11:35:21 +0300 Subject: [PATCH] Dereference Extensions getProps() inner contents Signed-off-by: Alex Andreev --- .../extension-preference-model.injectable.ts | 32 +++++++++++++++++++ .../components/+preferences/extensions.tsx | 23 ++++--------- .../get-extension-preference-items.ts | 20 ++++++++++++ 3 files changed, 59 insertions(+), 16 deletions(-) create mode 100644 src/renderer/components/+preferences/extension-preference-model.injectable.ts create mode 100644 src/renderer/components/+preferences/get-extension-preference-items.ts diff --git a/src/renderer/components/+preferences/extension-preference-model.injectable.ts b/src/renderer/components/+preferences/extension-preference-model.injectable.ts new file mode 100644 index 0000000000..300e293776 --- /dev/null +++ b/src/renderer/components/+preferences/extension-preference-model.injectable.ts @@ -0,0 +1,32 @@ +/** + * 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 { computed } from "mobx"; +import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; +import currentPathParametersInjectable from "../../routes/current-path-parameters.injectable"; +import { getExtensionPreferenceItems } from "./get-extension-preference-items"; + +export const extensionPreferencesModelInjectable = getInjectable({ + id: "extension-preferences-model", + + instantiate: (di) => { + const pathParameters = di.inject(currentPathParametersInjectable); + const extensions = di.inject(rendererExtensionsInjectable); + + return computed(() => { + const { extensionId, tabId } = pathParameters.get(); + const targetExtension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId); + + if (!targetExtension) { + throw new Error('Tried to get extension preferences for extension that does not exist.') + } + + return { + extensionName: targetExtension.manifest.name, + preferenceItems: getExtensionPreferenceItems(targetExtension, tabId) + } + }); + } +}); diff --git a/src/renderer/components/+preferences/extensions.tsx b/src/renderer/components/+preferences/extensions.tsx index 0b6ad69b77..2b84f74e80 100644 --- a/src/renderer/components/+preferences/extensions.tsx +++ b/src/renderer/components/+preferences/extensions.tsx @@ -4,19 +4,16 @@ */ import { withInjectables } from "@ogre-tools/injectable-react"; -import type { IComputedValue } from "mobx"; import { observer } from "mobx-react"; import React from "react"; import type { RegisteredAppPreference } from "./app-preferences/app-preference-registration"; +import { extensionPreferencesModelInjectable } from "./extension-preference-model.injectable"; import { ExtensionSettings } from "./extension-settings"; import { Preferences } from "./preferences"; -import extensionsPreferenceItemsInjectable from "./extension-preference-items.injectable"; -import currentPathParametersInjectable from "../../routes/current-path-parameters.injectable"; -import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; interface Dependencies { - preferenceItems: IComputedValue; - extensionName?: string; + preferenceItems: RegisteredAppPreference[]; + extensionName: string; } const NonInjectedExtensions = ({ preferenceItems, extensionName }: Dependencies) => ( @@ -27,10 +24,7 @@ const NonInjectedExtensions = ({ preferenceItems, extensionName }: Dependencies) {" "} preferences - {!extensionName && ( -
No extension found
- )} - {preferenceItems.get().map((preferenceItem, index) => ( + {preferenceItems.map((preferenceItem, index) => ( ( { getProps: (di) => { - const pathParameters = di.inject(currentPathParametersInjectable); - const extensionId = pathParameters.get().extensionId; - const extensions = di.inject(rendererExtensionsInjectable); - const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId); + const { preferenceItems, extensionName } = di.inject(extensionPreferencesModelInjectable).get(); return { - preferenceItems: di.inject(extensionsPreferenceItemsInjectable, pathParameters), - extensionName: extension?.manifest.name, + preferenceItems, + extensionName, }; }, }, diff --git a/src/renderer/components/+preferences/get-extension-preference-items.ts b/src/renderer/components/+preferences/get-extension-preference-items.ts new file mode 100644 index 0000000000..5cdd1ce7f7 --- /dev/null +++ b/src/renderer/components/+preferences/get-extension-preference-items.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; +import type { RegisteredAppPreference } from "./app-preferences/app-preference-registration"; + +export function getExtensionPreferenceItems(extension: LensRendererExtension, tabId?: string): RegisteredAppPreference[] { + const preferences = extension.appPreferences.map(preference => ({ + id: preference.id || preference.title, + ...preference, + })); + + if (tabId) { + return preferences.filter(preference => preference.showInPreferencesTab == tabId); + } + + return preferences.filter(preference => !preference.showInPreferencesTab); +}