From 4c8aaa8bbb0bb68f447b283ef9e9d933e66cdcdb Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Thu, 5 May 2022 10:47:10 +0300 Subject: [PATCH] Show specific preferences if tabId passed Signed-off-by: Alex Andreev --- .../__tests__/extensions.test.tsx | 37 ++++++++++++++++++- .../extension-preference-items.injectable.ts | 18 +++++---- .../components/+preferences/extensions.tsx | 2 +- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/renderer/components/+preferences/__tests__/extensions.test.tsx b/src/renderer/components/+preferences/__tests__/extensions.test.tsx index 61e3c75a9f..99200cf546 100644 --- a/src/renderer/components/+preferences/__tests__/extensions.test.tsx +++ b/src/renderer/components/+preferences/__tests__/extensions.test.tsx @@ -36,7 +36,7 @@ describe("", () => { it("renders proper page title", () => { const { getByText } = render(); - expect(getByText("some-test-extension-id settings")).toBeInTheDocument(); + expect(getByText("some-test-extension-id preferences")).toBeInTheDocument(); }); it("renders relevant preference items", () => { @@ -50,6 +50,24 @@ describe("", () => { expect(queryByTestId(`extension-preference-item-for-some-unrelated-preference-item-id`)).not.toBeInTheDocument(); }); + + describe("when tabId param is passed and extension has same showInPreferencesTab param", () => { + beforeEach(() => { + di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id", tabId: "license-extension-tab" }))); + }); + + it("does render related preferences for specific tab", () => { + const { getByTestId } = render(); + + expect(getByTestId(`extension-preference-item-for-preference-for-tab-item-id`)).toBeInTheDocument(); + }); + + it("does not render irrelevant preference items", () => { + const { queryByTestId } = render(); + + expect(queryByTestId(`extension-preference-item-for-some-unrelated-preference-item-id`)).not.toBeInTheDocument(); + }); + }); }); const extensionWithSpecificPreferenceItems: Partial = { @@ -85,5 +103,22 @@ const extensionWithSpecificPreferenceItems: Partial = { Input: () =>
, }, }, + + { + title: "preference for specific tab", + id: "preference-for-tab-item-id", + showInPreferencesTab: "license-extension-tab", + + components: { + Hint: () =>
, + Input: () =>
, + }, + }, ], + + appPreferenceTabs: [{ + title: "License tab", + id: "license-extension-tab", + orderNumber: 100, + }], }; diff --git a/src/renderer/components/+preferences/extension-preference-items.injectable.ts b/src/renderer/components/+preferences/extension-preference-items.injectable.ts index 30263369fa..5e54ce45ac 100644 --- a/src/renderer/components/+preferences/extension-preference-items.injectable.ts +++ b/src/renderer/components/+preferences/extension-preference-items.injectable.ts @@ -22,21 +22,25 @@ export const extensionPreferenceItemInjectionToken = getInjectionToken => { + instantiate: (di, pathParams: IComputedValue>): IComputedValue => { const extensions = di.inject(rendererExtensionsInjectable); + const { extensionId, tabId } = pathParams.get(); const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId); + const preferences = extension.appPreferences.map(preference => ({ + id: preference.id, + ...preference, + })); return computed(() => { if (!extension) { return []; } - return extension.appPreferences - .filter(preference => !preference.showInPreferencesTab) - .map(preference => ({ - id: preference.id, - ...preference, - })); + if (tabId) { + return preferences.filter(preference => preference.showInPreferencesTab == tabId); + } + + return preferences.filter(preference => !preference.showInPreferencesTab); }); }, lifecycle: lifecycleEnum.transient, diff --git a/src/renderer/components/+preferences/extensions.tsx b/src/renderer/components/+preferences/extensions.tsx index ca3500b05a..22ff381470 100644 --- a/src/renderer/components/+preferences/extensions.tsx +++ b/src/renderer/components/+preferences/extensions.tsx @@ -46,7 +46,7 @@ export const Extensions = withInjectables( const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId); return { - preferenceItems: di.inject(extensionsPreferenceItemsInjectable, extensionId), + preferenceItems: di.inject(extensionsPreferenceItemsInjectable, pathParameters), extensionName: extension?.manifest.name, }; },